维护大型模拟数据既困难又不切实际。当数据库结构发生变化时,这甚至变得更加困难。
假。
单元测试不需要“大型”模拟数据。它需要足够的模拟数据来测试场景,仅此而已。
另外,真正懒惰的程序员要求主题专家为各种测试用例创建简单的电子表格。只是一个简单的电子表格。
然后,懒惰的程序员编写了一个简单的脚本,将电子表格行转换为单元测试用例。确实很简单。
当产品发展时,将更新测试用例的电子表格并生成新的单元测试。一直做。真的行。
即使具有MVVM并具有测试GUI的能力,也需要大量代码来重现GUI场景。
什么?“复制”?
TDD的重点是设计可测试性的东西(测试驱动开发)。如果GUI如此复杂,则必须对其进行重新设计以使其更简单,更可测试。更简单也意味着更快,更可维护且更灵活。但是大多数情况下,更简单意味着可测试性更高。
我的经验是,如果将TDD限于简单的业务逻辑,则它会很好地工作。但是,由于测试(测试空间)的组合数量非常大,因此很难测试复杂的业务逻辑。
可以的。
但是,要求主题专家以简单的形式(例如电子表格)提供核心测试用例确实有帮助。
电子表格可能会变得很大。但这没关系,因为我使用了一个简单的Python脚本将电子表格转换为测试用例。
和。我确实必须手动编写一些测试用例,因为电子表格不完整。
然而。当用户报告“错误”时,我只是问电子表格中哪个测试用例是错误的。
那时,主题专家将更正电子表格,或者添加示例以解释应该发生的情况。在许多情况下,错误报告可以明确定义为测试用例问题。实际上,根据我的经验,将错误定义为坏的测试用例会使讨论变得非常简单。
专家们不必听专家试图解释超复杂的业务流程,而必须提供流程的具体示例。
TDD要求要求100%正确。在这种情况下,可以期望在创建测试期间会捕获到相互矛盾的需求。但是问题在于,在复杂的情况下并非如此。
不使用TDD绝对要求这些要求是100%正确的。一些人声称,TDD可以容忍不完整和不断变化的需求,而非TDD方法不能满足不完整的需求。
如果您不使用TDD,则会在实施阶段的后期发现矛盾。
如果使用TDD,则在代码通过某些测试但未通过其他测试时,就会更早发现矛盾。确实,TDD 在实现过程中早于实现(早于实现)(以及用户接受测试期间的参数)为您提供了矛盾的证明。
您的代码通过了一些测试,但未通过其他测试。您只查看那些测试,就会发现矛盾。它在实践中确实非常非常有效,因为现在用户必须争论矛盾并产生所需行为的一致且具体的示例。