我正在尝试测试此自定义模型,如果某些值为空,则它不是有效的模型。我的自定义模型在它自己的类中定义为:
public CustomModel(String FirstName, String LastName, String address, String phone)
...依此类推(还有更多字段,但我们现在仅使用这些作为示例)。
现在在我的测试中,我通过这样做创建一个虚拟模型( validator 是一个辅助类,用于检查它是否为空,这并不重要):
@Before
public void setUpBefore()
{
_customTestModel = new CustomModel("First", "Last", "123 Address", "1234567890");
}
然后作为测试示例,我会这样做:
@Test
public void testNotValidModel_NullLastName()
{
setUpBefore();
_customTestModel.put(1, null);
assertFalse(validator.test(null, _customTestModel));
}
我的问题是,如果我确实需要更改构建自定义模型的方式,请说我现在想这样做:
public CustomModel(String LastName, String FirstName, String phone, String address)
我需要返回到我的测试并重新执行我的 _customTestModel
并且还需要进入我的每个测试并更改 .put(1, null)
code> 到 .put(0, null)
到正确的插槽。
我意识到我的测试非常脆弱,每次我想更改 customModel
时都必须进行测试。我应该如何解决这个问题?
最佳答案
类型安全的要点是,如果您更改签名,则需要更改使用该签名的代码。单元测试的重点是从单元测试中调用新编写的代码。因此,如果您更改现有代码,您的客户端必须中断,如果添加新代码,则必须为其添加单元测试。系统正在按预期工作。
我能给你的任何解决方案都只是规避这个问题的一种方法。例如,您可以保留旧的构造函数作为遗留。通常我更喜欢让我的单元测试保持最新,而不是让它们阻止摆脱遗留代码。
如果您的生产客户在某种意义上有所提示,那么您就有理由保留遗留模型,或添加构建器模式,或其他一些解决方案。然后,您需要定义逻辑来维护不完整的模型,并添加更多的单元测试覆盖范围以覆盖旧代码和新代码。但这与您所希望的相反。
关于java - 用于模拟变化很大的假模型的良好单元测试实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41251002/