在tearDown(@After)方法上断言是错误的吗?
我甚至有多个测试用例,如果逻辑不同,输出必须在所有测试用例上相等。 所以我在考虑如何概括它们并仅将Assert方法放置一次。
有没有比这更好的方法:
static public class Tests() { private static String expected = null; private String actual = null; @BeforeClass public static void setUpBeforeClass() throws Exception { expected = new String("My Desired Output"); } @Before public void setUp() { actual = new String(); } @Test public void test1() throws Exception { actual = ... } @Test public void test2() throws Exception { actual = ... } @After public void tearDown() throws Exception { assertThat(actual, is(equalTo(expected))); } @AfterClass public static void tearDownAfterClass() { } }
运行方式:
@Test public void runTests() { Result result = JUnitCore.runClasses(Tests.class); assertThat(result.getRunCount(), is(2)); assertThat(result.getFailureCount(), is(0)); }
是的,在tearDown方法中断言是个坏主意。 根据JUnit文档,此方法存在
例如,撕下夹具,关闭网络连接。 执行测试后调用此方法。
我认为在测试类中存储您的预期值和实际值通常是个坏主意。 这些变量与测试有关,因此将它们存储在测试用例中并在测试用例中执行断言。 例如:
public class FooTest { @Test public void testFoo() { Object expected = // ... Object actual = // ... assertThat(actual, is(equalsTo(expected))); } }
此外,我在您的代码中看到所有测试都具有相同的预期值。 改变测试可能是个好主意,因此返回的值总是不同的。 一直只测试一个预期值会确保代码适用于此预期结果。 尝试更多,可能非常不同,并尝试测试一些角落案例。
如果你必须概括,那么你可以创建一个方法,如
private void testIt ( String actual ) { assertThat(actual, is(equalTo(expected))); }
并从所有测试方法中调用它。
如果测试失败,那么哪个测试失败将更加明显。
- 带有监听器的JavaFX Textfield给出:“java.lang.IllegalArgumentException:start必须<= the end”
- JavaFX布局等同于GridLayout
- 在httpclient.execute中的HttpClientConnectionOperator.connect时忽略套接字读取超时
- GWT IncompatibleRemoteServiceException
- AI如何为战列舰建立遗传规划模型
- @JoinFormula和@OneToMany定义 – 糟糕的文档
- 在selenium网格上创建并上传文件
- 在jsp中打印会话属性
- play2框架我的模板没有看到。 :package views.html不存在