使用Junit Rules简化你的测试用例
【摘要】 我们从一个简单的例子开始,假设你想要为类中所有的测试方法设置时延。简单的方法就是这样:public class BlahTest { @Test(timeout = 1000) public void testA() throws Exception { //... } @Test(timeout = 1000) public void testB() throws ...
我们从一个简单的例子开始,假设你想要为类中所有的测试方法设置时延。简单的方法就是这样:
public class BlahTest {
@Test(timeout = 1000)
public void testA() throws Exception {
//...
}
@Test(timeout = 1000)
public void testB() throws Exception {
}
@Test(timeout = 1000)
public void testC() throws Exception {
}
@Test(timeout = 1000)
public void testD() throws Exception {
}
@Test(timeout = 1000)
public void testE() throws Exception {
}
}
这样子,你重复了很多次,如果你想要改变这个延迟,你需要在所有方法里面更改这个数字。使用Timeout Rule即可
public class BlashTest {
@Rule
public Timeout timeout = new Timeout(2000);
@Test
public void testA() throws Exception {
}
@Test
public void testB() throws Exception {
}
@Test
public void testC() throws Exception {
}
@Test
public void testD() throws Exception {
}
}
临时文件夹
public class BlahTest {
@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();
@Test
public void testIcon() throws Exception {
File icon = tempFolder.newFile("icon.png");
}
}
期望中的异常
public class BlahTest {
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void testIcon() throws Exception {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("Dude, this is invalid");
}
}
你也可以自己实现TestRule接口,举个例子,初始化Mockito mocks的 Rule
@RequiredArgsConstructor
public class MockRule implements TestRule {
private final Object target;
public Statement apply(Statement base, Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
MockitoAnnotations.initMocks(target);
base.evaluate();
}
};
}
}
使用它,在你的类中声明
public class BlahTest {
@Rule
public MockRule mock = new MockRule(this);
@Mock
private BlahService service;
@Test
public void testBlash() throws Exception {
Assert.assertThat(service.blah(), CoreMatchers.notNullValue());
}
}
使用ClassRule的例子
public class MyServer extends ExternalResource {
@Override
protected void before() throws Throwable {
//start the server
}
@Override
public void after() {
//stop the server
}
}
使用ClassRule注册的时候,你的rule实例应该为静态。
public class BlahServerTest {
@ClassRule
public static MyServer server = new MyServer();
@Test
public void testBlah() throws Exception {
//test sth that depends on the server
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)