什么是模拟变化很大的假模型的良好单元测试实践?
What is a good Unit Test Practice for mocking a fake model that changes a lot?
我正在尝试测试此自定义模型,如果某些值为空,则它不是有效模型。我的自定义模型在它自己的 class 中定义为:
public CustomModel(String FirstName, String LastName, String address, String phone)
...依此类推(还有更多字段,但我们现在仅以这些字段为例)。
现在在我的测试中,我通过这样做创建了一个虚拟模型(验证器是一个助手 class 检查它是否为 null 这并不重要):
@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
时都必须进入测试。我应该如何解决这个问题?
类型安全的要点是,如果您更改签名,则需要更改使用该签名的代码。单元测试的全部要点是您从单元测试中调用新编写的代码。因此,如果您更改现有代码,您的客户端必须中断,如果您添加新代码,则必须为其添加单元测试。系统按预期工作。
我能给你的任何解决方案都只是一种规避它的方法。例如,您可以保留旧的构造函数作为遗产。通常我更愿意让我的单元测试保持最新,而不是让它们阻止删除遗留代码。
如果您有 生产 客户在某种意义上抱怨,那么您将有理由保留遗留模型、添加构建器模式或其他一些解决方案。然后,您需要定义逻辑来维护不完整的模型,并添加更多的单元测试覆盖范围以覆盖新旧代码。但这与你所希望的相反。
我正在尝试测试此自定义模型,如果某些值为空,则它不是有效模型。我的自定义模型在它自己的 class 中定义为:
public CustomModel(String FirstName, String LastName, String address, String phone)
...依此类推(还有更多字段,但我们现在仅以这些字段为例)。
现在在我的测试中,我通过这样做创建了一个虚拟模型(验证器是一个助手 class 检查它是否为 null 这并不重要):
@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
时都必须进入测试。我应该如何解决这个问题?
类型安全的要点是,如果您更改签名,则需要更改使用该签名的代码。单元测试的全部要点是您从单元测试中调用新编写的代码。因此,如果您更改现有代码,您的客户端必须中断,如果您添加新代码,则必须为其添加单元测试。系统按预期工作。
我能给你的任何解决方案都只是一种规避它的方法。例如,您可以保留旧的构造函数作为遗产。通常我更愿意让我的单元测试保持最新,而不是让它们阻止删除遗留代码。
如果您有 生产 客户在某种意义上抱怨,那么您将有理由保留遗留模型、添加构建器模式或其他一些解决方案。然后,您需要定义逻辑来维护不完整的模型,并添加更多的单元测试覆盖范围以覆盖新旧代码。但这与你所希望的相反。