刚刚测试过,可以按预期工作…上课…
public class SomeClass { public void someMethod(String someParameter) throws SomeException { throw new SomeException("Yep, really a SomeException"); }}例外…
public class SomeException extends Exception { public SomeException(String message) { super(message); }}和测试类一样,两个测试完全按预期工作:
public class TestSomeClass { @Rule public ExpectedException exception = ExpectedException.none(); @Test public void testSomeMethodWithRule() throws SomeException { exception.expect(SomeException.class); new SomeClass().someMethod("something"); } @Test(expected=SomeException.class) public void testSomeMethodWithExpected() throws SomeException { new SomeClass().someMethod("something"); }}下载完您的项目(请参阅注释)后,我不确定 为什么 ,但是我知道问题 出 在哪儿:这是
extendsTestcase。我假设这会以某种方式导致执行单元测试的不同方式(stacktrace意味着它们将通过
JUnit38ClassRunnerthen
执行)。删除它(无论如何您都不需要它)
Assert.<something>,例如,使用调用断言
Assert.assertTrue(...)。(您也可以为此使用静态导入,因此不必编写Assert部分)。那解决了您的问题,所有测试都成功。
另一种可能性似乎是保留
extendsTestCase和使用
@RunWith(BlockJUnit4ClassRunner.class),这也可以解决您的问题,因此TestCase的默认Runner可能不适合它。



