2016-06-27 126 views
0

我见过很多关于这个主题的信息,但想提供一个具体的例子,并提出一些具体问题。ASP MVC 5集成测试与单元测试与SDK

我目前正处于一个开发项目的中间,在该项目中,我正在通过OEM提供的SDK针对电话系统进行编程。我创建了几个扩展SDK功能的接口类,并将这些类重构为支持依赖注入以便于测试。在最底层,我有像“retrieveUserInfo”这样的接受连接接口和查询对象的方法。

当单元测试,我可能实际上创建一个连接到电话系统,取回给定的用户,并检查它的正确数据。这个测试对我来说很有意义,因为它让我知道我的中间件和底层OEM库都正常工作;但是,因为它实际上创建了与外部系统的连接,所以对我来说看起来更像是一个集成测试(如果您无法连接到电话系统,则测试将失败,用户没有按预期配置,我有一些错误在我的业务逻辑中,或者底层库存在问题)。

该测试是否应该标记为集成测试?如果是这样,我会怎么去尝试单元像“retrieveUserInfo”这样的测试方法?我如何正确分割这两种类型的测试?

回答

0

定义什么是“单位”是相当困难的。但是如果你正在测试的是将调用放到实际调用不同系统的外部库上,那么你肯定是在集成测试领域。

什么单位限制为是有点主观的,但可能仅限于在一个类的类或公共方法。

如果你想单元测试一个方法调用外部依赖的方法,那么这是你想要模拟或存根(请参阅Moq为好的模拟库)。

+0

所以我可以有一个Visual Studio项目,致力于*单元*测试,我嘲笑的外部依赖性和测试我的业务逻辑,另一个VS项目致力于集成测试,我居然打电话到外部的图书馆...听起来约对? – slashNburn

+0

你肯定会有一个单独的单元测试项目,但嘲讽不是一成不变的;一种解决方案可能是为您的电话系统(ITelephony)提取一个接口,添加一个假实现(MockTelephony),接线 - 全部在代码中完成;在你的单元测试项目中,你只需切换到使用模拟(它可以返回一些预定义的数据) –

+0

是的,通过这种方式拆分集成和单元测试是很常见的。有些人可能希望你回避整合测试期。所有测试套件不可避免地导致开销测试维护,集成测试比单元测试更为重要。 –