在开发Java应用程序时,我经常重写Object方法(通常是equals和hashCode).我想通过某种方式系统地检查我是否遵守每个类的Object方法的合同.例如,我希望测试断言对于相等的对象,哈希码也是相等的.我正在使用JUnit测试框架,所以我最好想要一些JUnit解决方案,我可以自动生成这些测试,或者一些测试用例可以以某种方式访问我的所有类并确保合同得到维护.
我正在使用JDK6和JUnit 4.4.
我们使用JUnit 3编写了很多集成测试,尽管我们现在使用4.4运行它们.其中一些需要一个tearDown方法,该方法在类中的所有测试完成后运行(以释放一些公共资源).
我看到这可以在junit 4中使用@AfterClass(org.junit)完成.但是,将其混合到扩展TestCase(junit.framework.*)的现有junit 3测试中似乎不起作用.[BTW有迁移工具吗?问题264680表明一年前没有一个.]
我已经看到过使用junit.extensions.TestSetup来提到这种事情.我对此的简要测试似乎不起作用.任何例子?
我收到错误"尚未创建临时文件夹",该错误来自方法IllegalStateException抛出TemporaryFolder.getRoot().看起来它没有初始化,但我的研究表明,在setUp() - 方法中初始化临时文件夹时通常就是这种情况.但是@Rule像我一样使用它应该在我看来是有用的.有任何想法吗?
考试班
public class FileReaderTest extends TestCase {
@Rule
public TemporaryFolder folder = new TemporaryFolder();
public FileReaderTest(String testName) {
super(testName);
}
@Override
protected void setUp() throws Exception {
super.setUp();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
public void testCSVWriterAndReader() throws Exception{
testWriterAndReader(new CSVFileWriter(), new CSVFileReader());
}
private void testWriterAndReader(FileWriteService writer, FileReader reader) throws Exception {
folder = new TemporaryFolder();
File tempFile = folder.newFile("test.csv");
DataSet initializedData = createMockData();
writer.writeDataSetToFile(initializedData, tempFile.getPath()); …Run Code Online (Sandbox Code Playgroud) 从JUnit 3到JUnit 4这个问题的精神,是否有任何正则表达式列表可以有效地从junit 4 API迁移到junit 5 API,无论代码大小如何?
我正在编写一些JUnit测试,它们从第三方库扩展了一个类.超类扩展TestCase,所以根据定义,我的子类也是如此.
在我的子类中,我用前缀编写测试方法,test然后执行这些方法.
但是,出于多种原因,我们希望转移到JUnit 4(其中一个原因是我们不希望将测试方法作为前缀test)
我尝试使用JUnit 4 @Test注释编写新测试,但这些方法不会被执行.
例如:
public abstract class UtilityClassFromThirdPartyLibrary extends TestCase {
}
public class MyTestClass extends UtilityClassFromThirdPartyLibrary {
public void testThisMethodIsInvokedBecauseItStartsWithTest {
}
@Test
public void thisMethodDoesNotGetInvoked {
}
}
Run Code Online (Sandbox Code Playgroud)
不扩展第三方测试类不是一种选择.(对于它的价值,它是Spring,它AbstractXmlFlowExecutionTests反过来扩展了其他Spring类,最终扩展TestCase.超类中的方法提供了如此多的设置和样板,没有扩展它们只是为了使用JUnit 4会适得其反)
如上所述,我们使用JUnit 4 @Test注释的动机之一是它允许我们更好地命名我们的方法.我们的观点是这个词test是多余的,因为该类显然是一个测试类,并且该方法带有注释@Test.我们以BDD样式编写测试,因此我们的测试方法名称描述了被测单元应该做什么 - 我们的命名约定是public void shouldDoSomething()
有没有人知道是否有可能混合' TestCase使用JUnit 4的方法扩展JUnit 3的''匹配测试类@Test?如果是这样,怎么样?
谢谢
内森