【发布时间】:2018-06-26 19:03:59
【问题描述】:
我们最近在 .NET 项目中开始了 TDD 方法,到目前为止我们已经完成了很好的单元测试,但我们仍然被集成和端到端测试的问题所困扰。假设我有三个对象,其构造函数如下
constructor(kafka, sql, filesystem); // MOQ all the three
constructor(mongo, webservice, kafka); // MOQ all the three
constructor(googlemaps, sql); // MOQ all the two
这里我们有 6 个外部组件要集成到我们的应用程序中。我们可以通过在构造函数注入中模拟它们的所有依赖项来对这三个对象进行单元测试,我们还可以通过对所有 6 个外部组件进行实时设置来进行端到端测试。
我的问题是我们如何处理集成测试?集成测试是否处理对象测试?我相信单元测试处理对象测试,因此集成必须处理外部组件测试。如果我们要写集成测试,我该怎么做?
// Setup kafka real and other objects must still be mocked
constructor(kafka, sql, filesystem); MOQ sql, filesystem but kafka is real
constructor(mongo, webservice, kafka); MOQ mongo, webservice but kafka is real
constructor(googlemaps, sql); MOQ all the two
通过将 kafka 组件作为真实设置和所有其他对象作为模拟来编写测试。如果我们这样做,我们最终会得到类似于单元测试的重复代码,但不是模拟对象,我们通常会得到真实的环境设置,但测试用例仍然是一样的,对吧?
我们可以只进行单元测试和端到端测试吗?因为端到端测试一次对所有对象进行集成测试。如果端到端测试进行所有实时对象测试,那么我们为什么还要进行集成测试?进行集成测试有哪些最佳实践。我们什么时候应该进行集成测试。非常感谢任何帮助。
【问题讨论】:
-
听起来您对什么是集成测试有疑问?如果是这样,那你为什么要拥有它们?您试图解决(或防止发生)什么问题?
-
@MarkSeemann 通常我们有三个测试单元测试、集成测试和端到端测试。我希望我的团队进行集成和端到端测试。我怎么去?如果我们编写端到端测试,它会解决所有集成测试吗?
-
端到端测试(验收测试)将解决您的问题,因为在端到端测试中,您将测试所有外部模块是否正确集成到您的系统中。
标签: c# unit-testing testing tdd integration-testing