我已经完成了一个单元测试类,但是当我运行它时,它返回一个异常。以下是我的测试用例:
import java.util.Date;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.modules.junit4.rule.PowerMockRule;
import com.tibco.plugin.hl7.utils.EnvUtils;
import static org.easymock.EasyMock.expect;
import static org.junit.Assert.*;
import static org.powermock.api.easymock.PowerMock.expectNew;
import powermock.exception.A;
import powermock.exception.AException;
@RunWith(PowerMockRunner.class)
@PrepareForTest({A.class})
public class PowerMockRuleTest {
@Rule
public ExpectedException exception = ExpectedException.none();
//
@Test
public void testException() throws Exception{
exception.expect(AException.class);
A a = new A();
a.sayA();
}
@Test
public void testMockB() throws Exception{
A b = PowerMock.createMock(A.class);
expect(b.sayB()).andReturn("c");
PowerMock.replay(b);
assertEquals(b.sayB(), "c");
simulateCurrentTime();
}
}
以下是例外的一部分:
java.lang.ClassCastException: org.junit.rules.ExpectedException cannot be cast to org.junit.rules.MethodRule
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:79)
...
然后我创建一个新的java项目并将相关的java代码和测试用例以及所有相关的库复制到新项目中,重新运行测试用例,它工作正常!然后我使用“Beyond Compare”比较了两个类路径文件的差异,发现了以下差异:
我已经用红线标记了差异并带有一些描述。
然后我把内容“ <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
”复制到第一个项目,单元测试就可以运行成功了!
这让我很困惑,这个配置在classpath中有什么用?我应该每次都手动复制吗?如果是这样,这不是一份快乐的工作:-(