代码之家  ›  专栏  ›  技术社区  ›  user3205479

如何进行集成测试和端到端测试?

  •  0
  • user3205479  · 技术社区  · 8 年前

    我们最近在我们的中开始了TDD方法。NET项目,到目前为止,我们已经做了很好的单元测试,但我们仍被集成和端到端测试的问题所困扰。假设我有三个对象,其构造函数如下

    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组件设置为真实设置,并将所有其他对象设置为模拟来编写测试。如果我们这样做,我们会得到类似于单元测试的重复代码,但不是模拟对象,我们通常会得到真实的环境设置,但测试用例仍然是一样的,对吗?

    我们可以只进行单元测试和端到端测试吗?因为端到端测试一次对所有对象进行集成测试。如果端到端测试完成了所有实时对象的测试,那么为什么我们还要进行集成测试呢?进行集成测试的一些最佳实践是什么。我们应该在什么时候进行集成测试。非常感谢您的帮助。

    1 回复  |  直到 8 年前
        1
  •  3
  •   rad    8 年前

    如果你想写这些测试,你至少需要理解为什么要写它们。他们将为您解决哪些问题。每种测试的缺点是什么。

    首先,有些人称端到端集成测试为 Martin Fowler in a recent blog 调用广泛的集成测试。这个测试或多或少像一个黑盒测试,对一些用户接受场景很有用,不容易维护,很难从失败的测试中得出错误的结论。根据我的经验,很少有用,更多的是痛苦(MikeCohn金字塔测试可能是有用的概念)。

    另一方面,集成测试验证与一个外部服务的集成是否正常工作,他称之为狭义集成测试。