测试中设置断点
对测试用例的期望
- 它准备一些方案
- 它执行被测系统
- 它对构建测试时所预测的答案做出了一些具体的断言
如果看到...
这是一个测试。 它使用Java,但可以使用任何语言。
@Test void theOperationIsSuccessful() {
assertTrue(service.isLastOperationSuccessful()); }
上面有什么问题?
它只是在做准备,行动和断言这三件事之一。 这只是断言。 为了使此测试有意义,还有其他事情要做。 它不仅仅是一个完整的测试用例,而是更多的测试用例的片段。
这是错的吗?
我确定我已经编写了上述测试之类的东西并对它们感到满意……但是在我们认为它可能没问题之前,让我们看一下它可能意味着什么。 如果可以避免这些情况,那么测试将变得更好,更清晰,然后再回到准备,执行和断言或给出的1-2-3之中。
为什么我的设置不存在?
- 也许我们必须为所有测试一致地设置系统,并且我们想断言任何测试的初始状态–可以,但是可能需要注释。
- 也许我们过度地设置了设置,以使其从测试用例中窃取了一些代码,仅保留断言来编写–就像前面的示例一样,除了没有其他测试需要此通用设置之外
- 也许我们的测试建立了一个全局状态,然后对该状态进行了一系列单独的声明-这是一个令人困惑的模式,因为它是一个测试用例,分为几个部分-也许可以使用Cucumber之类的东西更好地表达,而不是像一个单元测试框架那样JUnit,TestNG,摩卡,茉莉花等
- 也许我们的每个测试都处于因果关系中–如果运行测试的成本很高,这可能很有用,因此我们需要小心浪费资源重新执行的事情,但这会使事情变得更难以理解。
结论
自包含的测试很容易理解。 如果需要共享设置,那也是很常规的。 如果它是在多个位置执行测试的结构的一部分,则尽管仅断言测试看起来更简单,但整个测试要复杂得多,如果可能,应该简化。
翻译自: https://www.javacodegeeks.com/2019/11/test-setup-is-somewhere-else.html
测试中设置断点