我试图测试这个自定义模型,如果某些值为null,它将不是一个有效的模型。我的自定义模型在其自己的类中定义为:
public CustomModel(String FirstName, String LastName, String address, String phone)
......等等(有更多字段,但我们现在只是以这些为例)。
现在在我的测试中,我通过这样做来创建一个虚拟模型(验证器是一个帮助程序类,检查它是否为空,这不重要):
@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)
更改为.put(0, null)
到正确的位置
我意识到我的测试非常脆弱,每次我想要更改customModel
时我都要进入测试阶段。我该怎么办呢?
答案 0 :(得分:3)
类型安全的整点是指如果更改签名,则需要更改使用签名的代码。单元测试的全部要点是您从单元测试中调用新编写的代码。因此,如果您更改现有代码,则客户端必须中断,如果添加新代码,则必须为其添加单元测试。系统按预期工作。
我能给你的任何解决方案只是一种规避它的方法。例如,您可以将旧构造函数保留为遗留构造函数。通常我更喜欢让我的单元测试保持最新,而不是让他们阻止删除遗留代码。
如果您的生产客户在某种意义上抱怨,那么您将有机会保留旧模型,或添加构建器模式或其他解决方案。然后,您需要定义逻辑以维护不完整的模型,并添加更多的单元测试覆盖率以涵盖旧代码和新代码。但这与你所希望的相反。