Unit testing 如何为具有多个属性的对象编写单元测试
我在应用程序中有各种对象,每个对象都有isvalid方法来测试是否正确设置了所有属性的值(根据业务规则)。现在,要测试每个冲突isvalid抛出false,我必须编写与在isvalid中检查规则一样多的测试。有没有更简单的方法来做到这一点?我正在使用MBunit。 < P>您可能想考虑在您的.中是否认为复制测试工作的需要并不表示<强>代码复制< /强>。 也许您可以将业务规则作为一个组件来实现,在这种情况下,您只需要测试策略实现一次,然后针对每个SUT验证它们是否使用了正确的策略Unit testing 如何为具有多个属性的对象编写单元测试,unit-testing,Unit Testing,我在应用程序中有各种对象,每个对象都有isvalid方法来测试是否正确设置了所有属性的值(根据业务规则)。现在,要测试每个冲突isvalid抛出false,我必须编写与在isvalid中检查规则一样多的测试。有没有更简单的方法来做到这一点?我正在使用MBunit。 < P>您可能想考虑在您的.中是否认为复制测试工作的需要并不表示代码复制< /强>。 也许您可以将业务规则作为一个组件来实现,在这种情况下,您只需要测试策略实现一次,然后针对每个SUT验证它们是否使用了正确的策略 否则,一组听起来像是
否则,一组听起来像是要走的路。我不确定您希望什么更简单。您可能希望创建一个帮助器方法来创建一个有效的对象,以便每个测试都类似于:
public void FooWithNullNameIsInvalid()
{
Foo foo = CreateValidFoo();
foo.Name = null;
Assert.IsFalse(foo.IsValid);
}
然后每个测试都相对较小,测试一件事,并且容易理解。是的,这类事情可能有点单调,但它是有效的
另一种缩短测试时间的方法是:
private void AssertInvalidChange(Action<Foo> change)
{
Foo foo = CreateValidFoo();
change(foo);
Assert.IsFalse(foo.IsValid);
}
现在,在那个阶段,您可以将所有有效性测试放在一个方法中,每个无效更改一行。这当然更简单,但它违反了“只测试一件事”的口号。就我个人而言,我对此相当宽松——我会相当强烈地想这样做。缺点是,如果您有多个可能失败的测试,那么一次只能看到一个失败
public void FooWithNullNameIsInvalid()
{
AssertInvalidChange(foo => foo.Name = null);
}