大多数 Assert 调用AssertionError
如果失败就会抛出一个错误,因此代码看起来与您放置的方式不完全相同,但您的代码可以稍微调整并编译/运行。因为它们是作为异常实现的,所以您可以从任何地方调用 Assert 方法,包括您为帮助更轻松地运行测试而设置的任何帮助程序类,只要您愿意,就可以在堆栈深处调用。
编辑:如果您需要对许多对象进行一组类似的断言,我非常建议您设置帮助程序类。我误解并认为您TestObject
的系统是您正在测试的系统;其余的则适用于这种情况。
==
没有什么可以阻止您从Assert
被测类中调用方法,但是 JUnit 的部分意图是拥有与您的代码类分开的干净的测试类。这样,测试可以单独发展,并且通常甚至不需要更改,除非您的类的接口发生更改。在我的代码中,我将它们放在一个单独的“源文件夹”中的同一个包中,所以你有:
- src/com/mypackage/project1/database/DatabaseAccessor.java
- testsrc/com/mypackage/project1/database/DatabaseAccessorTest.java
- testsrc/com/mypackage/project1/database/DatabaseAccessorSystemTest.java
以这种方式分离事物的原因之一是确保没有测试代码在生产中运行;如果该verifyTest
方法在同一个类中,则没有什么可以阻止您在您的类中调用它——或者更糟的是,其他类从代码库的其他地方调用它。您还可以避免依赖生产代码中的 junit.jar。
如果您希望在生产代码中进行断言以避免不一致的状态或非法参数,那是另一回事,您应该避免使用 JUnit 的Assert
类 - 或者,就此而言,assert
语句(根据参数编译出来)javac
)。相反,更喜欢 Guava 之类的库Preconditions
。