c# - ServiceStack:单元测试 WebServices

标签 c# web-services unit-testing servicestack

我是 ServiceStack 的新手,我正在尝试了解不同部分如何工作以及如何组合在一起。这是我正在玩的简单服务:

[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# 类……当然单元测试成功了。但是,如果我像这样重写单元测试(基于我在 Internet 上找到的示例)会怎样?

[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");
    }
}

结果完全一样...那我为什么要使用模拟的东西呢?

最佳答案

查看此 previous answer for different Unit Testing options in ServiceStack .

这里还有一些 Integration Testing 的例子.你选择的是你想要什么以及你想要测试多少的偏好,例如集成测试有效地测试托管在 ServiceStack 实例中的实时服务,包括任何自定义过滤器或插件。单元测试仅测试您的服务实现,这更容易和更快。

关于c# - ServiceStack:单元测试 WebServices,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19104380/

相关文章:

c# - Protobuf-net序列化InvalidOperationException

web-services - 您如何监控您的网络服务?

c# - 在公司 AD 中的 Windows 10 上使用 ADAL for .NET 登录到 Azure AD

c# - 句柄不支持与 CreateFile 的同步操作

c# - 任务返回类型给出并非所有代码路径都返回一个值

php - 拍摄相机照片并将其发送到 iPhone 中的 php 服务器

web-services - 为生成的 wsimport 文件定制 XmlAdapter

javascript - Jest - 类中的模拟变量

python - 仅当测试通过时才在 git 中提交

unit-testing - 在Spock中使用GroovyMock或类似方法模拟静态方法