final Validator pojoValidator = ValidatorBuilder.create()
.with(
new NoPublicFieldsRule (),
new NoPrimitivesRule (),
new GetterMustExistRule (),
new SetterMustExistRule ()
)
.with(
new DefaultValuesNullTester (),
new SetterTester (),
new GetterTester ()
)
.build();
pojoValidator.validate( PojoClassFactory.getPojoClasses( "net.initech.app", new FilterPackageInfo() ) );
Describe 'LineItem class'
Describe 'setVAT()'
it 'should store the VAT rate'
lineItem = new LineItem()
lineItem.setVAT( 0.5 )
expect( lineItem.vat ).toBe( 0.5 )
虽然如果 setVAT会抛出一个异常,一个相应的测试将是适当的,因为现在 有的是一个外部效应。
如何测试 getter 和 setter?
如果这种改变对外部没有影响,那么改变对象的内部状态实际上是没有意义的,即使这种影响后来才出现。
因此,对 setter 和 getter 的测试应该关注这些方法的外部效应,而不是内部效应。
例如:
Describe 'LineItem class'
Describe 'getGross()'
it 'should return the net time the VAT'
lineItem = new LineItem()
lineItem.setNet( 100 )
lineItem.setVAT( 0.5 )
expect( lineItem.getGross() ).toBe( 150 )
你可能会想:
等一下,我们正在测试 getGross()这里 没有setVAT()。
但是如果 setVAT()发生故障,那么测试仍然会失败。
羽毛,M。 ,2004。有效地使用遗留代码。 Prentice Hall Professional。
assertTrue(executor.execute(*TheClassIWantToTest.class*, Arrays.asList( new DefensiveCopyingCheck(),
new EmptyCollectionCheck(), new GetterIsSetterCheck(),
new HashcodeAndEqualsCheck(), new PublicVariableCheck())));