如何为依赖于其他服务或数据库的服务编写单元测试

时间:2015-10-20 13:18:23

标签: c# .net unit-testing integration-testing moq

对不起,如果我问的是非常基本的问题,

我有一组Web服务(使用.Net WebApi开发)。这些服务是业务层或数据访问层API。这些API要么依赖于其他服务,要么依赖于数据库本身。

我想为它编写单元测试用例。我有以下问题

  1. 由于业务层API依赖于数据访问服务或其他一些服务。如果我只是为了调用业务API而编写单元测试,那么它将调用数据访问API。这是编写单元测试用例的正确方法吗?或者我应该使用单元测试注入所有依赖项对象?我认为之前的一个是集成测试,而不是单元测试。

  2. 我应该为数据访问层编写单元测试吗?我检查了这个链接(Writing tests for data access code: Unit tests are waste),它说DAL不需要单元测试。我还应该为数据访问层编写测试吗?我认为这将是集成测试而非单元测试?

1 个答案:

答案 0 :(得分:1)

问题1:

我想说如果你想做TDD,那么它不是"正确的"因为正如你所说,你将进行集成测试。然后,也许你想要做TDD并且集成测试对你来说已经足够好了,但要回答这个问题:这不是**单位的正确方法 - **测试你的代码。

问题2

我想说这取决于您在数据访问层中的含义。例如,如果您实现存储库,您可能需要编写一些测试。

保存方法

您希望确保给定您从存储库中检索到的实体,编辑此实体的某些属性并持久保存更改实际上将保存修改而不创建新实体。现在:您可能认为这是一个集成测试,但它实际上取决于您的代码设计得如何。例如,您的存储库可能只是在低级ORM之上的额外逻辑层。在这种情况下,在测试save方法时,您将要做的是断言在存储库中注入的ORM服务上使用正确的参数调用正确的方法。

错误和异常

在访问数据时,可能会出现诸如与数据库的连接中断,或者数据格式不符合预期或反序列化问题等问题。如果您想提供一些良好的错误处理并可能创建自定义异常并根据上下文向它们添加更多信息,那么您肯定要编写测试以确保传播Corrext信息

另一方面

如果你的DAL只是包含一个不可模拟的ORM的几个类,并且你没有任何逻辑,那么也许你不需要测试,但似乎这并没有&# 39;经常发生,你几乎总会有一些可能出错的逻辑以及你想要测试的。