问题 服务堆栈和Mocking,任何教程?


我目前正在评估ServiceStack(在.Net中创建基于休息的服务)。其中一个感兴趣的领域是测试方面。我的休息服务将注入许多应用服务(目前使用Autofac)。我需要的是一种机制来测试其余层并在我的应用层上定义期望(通过MOQ),所以我没有进行集成测试,而是单元测试这一层?

关于如何做到这一点的任何想法?


1524
2018-03-06 15:15


起源



答案:


一个 ServiceStack服务 就像任何普通的C#Service类一样,可以像任何其他类一样以非常相同的方式进行模拟。 ServiceStack Service的最小依赖性是实现无依赖性 IService 接口标记和任何服务只接受请求DTO并返回任何对象的位置。

单元测试ServiceStack服务的一种方法是使用DirectServiceClient 在这个例子中看到这样做的一个好处是它允许您使用相同的单元测试作为集成测试 - 测试所有不同的XML,JSON,JSV和SOAP端点。

否则你可以像其他任何类一样进行单元测试和模拟,例如:

var service = new TestService {
   MyDependency = new Mock<IMyDependency>().Object
};
var response = service.Get(new Test { Id = 1 });
Assert.That(response.Result, Is.EqualTo("Hello, 1"));

12
2018-03-06 16:25



@谢谢。我想我们将为我们的新项目提供服务。做得好。 - JD.
当我以这种方式模拟服务时,过滤器属性似乎没有被触发,那是预期的行为吗? - Shagglez
@CoffeeAddict令人失望的是,我们的技术人员认为他们的技术流程应该盲目地强加于每个软件项目(而不是实际产生效益的地方),尽管只有一小部分软件使用流程驱动的邪教实践,如TDD。我们更喜欢Test After,尤其是。在设计我们的服务API时 在设计服务时要特别注意 这对TDD设计的自下而上方法无益。 - mythz
顺便说一句,感谢链接,它给了我设计方面的ServiceStack背后的思考 - PositiveGuy
np :)也收回了我的孤儿回复。 - mythz


答案:


一个 ServiceStack服务 就像任何普通的C#Service类一样,可以像任何其他类一样以非常相同的方式进行模拟。 ServiceStack Service的最小依赖性是实现无依赖性 IService 接口标记和任何服务只接受请求DTO并返回任何对象的位置。

单元测试ServiceStack服务的一种方法是使用DirectServiceClient 在这个例子中看到这样做的一个好处是它允许您使用相同的单元测试作为集成测试 - 测试所有不同的XML,JSON,JSV和SOAP端点。

否则你可以像其他任何类一样进行单元测试和模拟,例如:

var service = new TestService {
   MyDependency = new Mock<IMyDependency>().Object
};
var response = service.Get(new Test { Id = 1 });
Assert.That(response.Result, Is.EqualTo("Hello, 1"));

12
2018-03-06 16:25



@谢谢。我想我们将为我们的新项目提供服务。做得好。 - JD.
当我以这种方式模拟服务时,过滤器属性似乎没有被触发,那是预期的行为吗? - Shagglez
@CoffeeAddict令人失望的是,我们的技术人员认为他们的技术流程应该盲目地强加于每个软件项目(而不是实际产生效益的地方),尽管只有一小部分软件使用流程驱动的邪教实践,如TDD。我们更喜欢Test After,尤其是。在设计我们的服务API时 在设计服务时要特别注意 这对TDD设计的自下而上方法无益。 - mythz
顺便说一句,感谢链接,它给了我设计方面的ServiceStack背后的思考 - PositiveGuy
np :)也收回了我的孤儿回复。 - mythz