当前位置: 首页 > 知识库问答 >
问题:

JUnit AssertionError-未引发预期异常

牟恺
2023-03-14
public FSDataInputStream getObj(String hName, Path p) throws IOException {

    String myKey = pathToKey(hName, p);
    FileStatus status = memoryCache.getStatus(p.toString());
    if (status == null) {
      status = getStatus(hName, p, "getObj");
    }
    if (status.isDirectory()) {
        throw new FileNotFoundException("Can't open " + path
  + " because it is a directory");
    }
    InputStream inputStream = new InputStream(bucket, myKey,
    status.getLen(), client, readAhead, inputPolicy);

    return new FSDataInputStream(inputStream);
}
public class ClientTest {
    MemoryCache memoryCache = mock(MemoryCache.class);
    FileStatus fileStatus = mock(FileStatus.class);

    @Rule
    public final ExpectedException exception = ExpectedException.none();

    @Test
    public void getObjTest() throws Exception {
        Path path = new Path("xyz://aa-bb-cc/data7-1-23-a.txt");

        when(memoryCache.getFileStatus(path.toString())).thenReturn(fileStatus);
        when(fileStatus.isDirectory()).thenReturn(true);
        exception.expect(FileNotFoundException.class);
    }
}

java.lang.AssertionError:预期测试将在org.junit.Assert.Fail(Assert.java:88)在org.junit.rules.ExpectedException.FailduetOmissingException(ExpectedException.java:263)在org.junit.rules.ExpectedException.Access$200(ExpectedException.java:106)在org.junit.rules.ExpectedException.Java:245)在ckjunit47runnerdelegateimpl.java:91)在org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateimpl.$powermockjunit44methodrunner.runbeforesthentesthenafters(powermockjunit44runnerdelegateimpl.java:282)在org.junit.internal.runners.methodroadie.runtest(methodroadie.java:87)在莫ckjunit44runnerdelegateimpl.java:207)在org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateimpl.runmethods(powermockjunit44runnerdelegateimpl.java:146)在org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateimpl.java:146)在.modules.junit4.internal.impl.powermockJunit44RunnerDelegateImpl.run(powermockJunit44RunnerDelegateImpl.java:122)在org.powermock.modules.junit4.common.internal.impl.junit4TestSuiteChunkerImpl.run(junit4TestSuiteChunkerImpl.java:106)在4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)在org.eclipse.jdt.internal.junit.runner.testExecution.run(testExecution.java:38)在org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtest(remotetestrunner.java:459)在org.eclipse.jdt.internal.junit.runner.remotetestrunner.java:678)在.java:192)

有人能告诉我什么地方做错了吗?

共有1个答案

赵涵亮
2023-03-14

方法getobj必须在类中声明(我们在OP中看不到这一点),但让我们假设它在这个类中:

public class Foo {
    private MemoryCache memoryCache;

    public Foo(MemoryCache memoryCache) {
        this.memoryCache = memoryCache;
    }

    public FSDataInputStream getObj(String hName, Path p) throws IOException {
        // ...
    }
} 

现在,您的测试可以如下所示:

public class ClientTest {
    private MemoryCache memoryCache = mock(MemoryCache.class);
    private FileStatus fileStatus = mock(FileStatus.class);

    @Rule
    public final ExpectedException exception = ExpectedException.none();

    @Test
    public void getObjTest() throws Exception {
        Path path = new Path("xyz://aa-bb-cc/data7-1-23-a.txt");

        // create the class-under-test, supplying the mocked MemoryCache
        Foo foo = new Foo(memoryCache);

        // establish your expectations on the mocked classes
        // for this test the expectations are:
        // - memoryCache returns the mocked fileStatus    
        // - the mocked fileStatus 'is a' directory        
        when(memoryCache.getFileStatus(path.toString())).thenReturn(fileStatus);
        when(fileStatus.isDirectory()).thenReturn(true);

        // you expect a FileNotFoundExceptionException ...
        exception.expect(FileNotFoundException.class);

        // ... when you invoke getObj
        foo.getObj("aString", path);
    }
}

备注:

    null
 类似资料:
  • 我相信我的问题有一个简单的理论答案,但我找不到。 ...我希望显示的错误消息是 ORA-20001value_error 但是,不幸的是,我得到了:

  • 不同的是,第一个列表包含5项,而第二个列表包含3项。使用的JVM是: 问题:为什么第二段代码不抛出java.util.concurrentModificationException?

  • 我将请求映射到类,如下所示: 有人能解释为什么我在请求中的数组没有与类A中的数组映射吗?

  • 我正在尝试使用@Valid验证我的JPA实体,如下所示: 它工作了一段时间,但现在它停止工作,我不知道为什么。我试着在< code>persist方法中手动执行,它按预期工作: 可能会发生什么情况,或者我该如何调试?

  • 这就是我的应用程序中测试的样子: 我怎样才能避免这种行为呢?

  • 这个测试通过了,因为它得到的是nullpointerexception,但是,显然存在一个带有asserTrue(false)的断言错误,因此我希望它失败。 解决这个问题的最好方法是什么?解决这个问题的方法可能是下面的,但我不知道这是否是正确的方法。 第二次测试如预期的那样失败了。