2013-09-30 48 views
3

我對ServiceStack非常陌生,我試圖理解不同的部分是如何工作和組合在一起的。下面是簡單的服務,我玩:ServiceStack:單元測試WebServices

[Route("/welcome")] 
[Route("/welcome/{Name}")] 
public class Welcome 
{ 
    public string Name { get; set; } 
} 

public class WelcomeResponse 
{ 
    public string Result { get; set; } 
} 

public class WelcomeService : Service 
{ 
    public object Any(Welcome request) 
    { 
     return new WelcomeResponse { Result = "Welcome " + request.Name }; 
    } 
} 

...這裏是單元測試:

[TestFixture] 
public class WelcomeServiceTest 
{ 
    [Test] 
    public void Welcome() 
    { 
     var service = new WelcomeService(); 
     var response = (WelcomeResponse) service.Any(new Welcome { Name = "Gonzo" }); 
     Assert.That(response.Result == "Welcome Gonzo"); 
    } 
} 

在單元測試類上面我使用的服務類爲正常C#類......當然單元測試成功了。但是如果我像這樣重寫單元測試(基於我在互聯網上找到的一個示例)呢?

[TestFixture] 
public class WelcomeServiceTest 
{ 
    [Test] 
    public void Welcome() 
    { 
     var context = new Mock<IRequestContext>(); 
     context.SetupGet(f => f.AbsoluteUri).Returns("localhost:8888/welcome"); 

     var service = new WelcomeService { 
      RequestContext = context.Object 
     }; 

     var response = (WelcomeResponse) service.Any(new Welcome { Name = "Gonzo" }); 
     Assert.That(response.Result == "Welcome Gonzo"); 
    } 
} 

結果是完全一樣的...所以我爲什麼要使用模擬的東西?

回答

1

看到這個previous answer for different Unit Testing options in ServiceStack

這裏也有一些Integration Testing的例子。您選擇的是您想要什麼以及想要測試多少的偏好,例如集成測試有效地測試ServiceStack實例中託管的實時服務,並附帶任何自定義過濾器或插件。單元測試僅測試您的服務實現,這更簡單快捷。

+0

好的,非常感謝你...這個答案正是我所尋找的:-) – j3d