是否可以绕过单元测试中的某些异常?

时间:2018-12-13 17:20:14

标签: java unit-testing ldap

是否有可能绕过mockito中的某些异常?听起来很疯狂。您想在我假设的单元测试中捕获预期的异常。但是,我决定尝试提出这个问题。这是我的情况,希望我可以借此改善对mockito和一般unit test校长的理解。

我必须使用Foo单元测试框架为企业Web应用程序中的特定类mockito构建一个简单的单元测试。

这个Foo类需要ldapdatabase连接,但是由于某种原因,我不能在单元中使用特定于开发环境的ldapdatabase测试。

我只需要测试访问ldap的零件,以便决定使用unboundid in memory ldap,它允许在运行时创建轻量目录,并在测试完成后将其从内存中删除。

我的问题是在通过Foo注释实例化@InjectedMocks类的过程中,它触发了调用许多其他类及其方法的链式反应。它引发了许多我所期望的例外。

我正试图找到一种方法,以某种方式忽略某些特定的异常,例如加载/读取环境特定的属性文件或数据库访问等。

出于我的目标,我不需要读取道具文件或数据库访问权限。

我读过ExpectedException,如果我没记错的话,junit提供了mockito的子集,但是我认为它的目的与我绕过某些异常的意图不符。我对此可能是错的。

我要做的就是:

  1. 实例化Foo
  2. 调用其方法之一,该方法将从In memory ldap读取组列表
  3. 验证返回的数据

这是测试课程的简化版本:

@RunWith(MockitoJUnitRunner.class)
public class FooTest {

    private static InMemoryDirectoryServer ldapServer;
    private static Integer ldapPort = xxxxx;

    @InjectedMocks
    Foo footester = Foo.getInstance();

    @BeforeClass
    public static void setUpBeforeClass() {
        try {
            // execute instantiate in memory ldap..
        } catch (Exception e) {
           // do print out
        }
    }

    @Test
    public void testLdap() {
       // before it reaches here exceptions were thrown
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        // do tear down execution
    }
}

1 个答案:

答案 0 :(得分:0)

您可以捕获这样的异常:

@Test(expected = YourExceptionHere.class)
public void testSomething()
{
    foo(FOO_VALUE);
}