Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中进行单元测试时,如何跳过一段代码_Java_Unit Testing_Integration Testing - Fatal编程技术网

在java中进行单元测试时,如何跳过一段代码

在java中进行单元测试时,如何跳过一段代码,java,unit-testing,integration-testing,Java,Unit Testing,Integration Testing,我正在开发一个带有单元/集成测试的Java web应用程序。应用程序部署到Jetty,并在运行maven的集成测试阶段时使用H2 db。我有一个oracle函数,它是从dao层调用的,不能迁移到H2 db,因此我想在运行测试用例时在代码中模拟/跳过这一部分 我曾想过要有一个标志,它可以告诉我是否在测试模式下运行应用程序,并将条件放入代码中,但对我来说,它看起来不像更干净的方法。请建议实现这一点的最佳方法。将Oracle本机调用提取到一个单独的类中(可能是某个DAO)。将该DAO注入使用它的类。创

我正在开发一个带有单元/集成测试的Java web应用程序。应用程序部署到Jetty,并在运行maven的集成测试阶段时使用H2 db。我有一个oracle函数,它是从dao层调用的,不能迁移到H2 db,因此我想在运行测试用例时在代码中模拟/跳过这一部分


我曾想过要有一个标志,它可以告诉我是否在测试模式下运行应用程序,并将条件放入代码中,但对我来说,它看起来不像更干净的方法。请建议实现这一点的最佳方法。

将Oracle本机调用提取到一个单独的类中(可能是某个DAO)。将该DAO注入使用它的类。创建该DAO的第二个实现,不做任何事情来代替调用Oracle。在集成测试期间,注入后一种实现

避免代码中的标志。如果您使用的是Spring,请使用将有选择地创建一个实现或另一个实现的构建概要文件


这就是依赖注入如何帮助您测试代码的:如果您想模拟系统的某些部分,只需注入模拟版本。

请使用一些好的模拟框架,如or或其他类似的模拟框架


请注意:您可能需要重新考虑代码以使其更易于测试。

如果问题确实是:

在java中进行单元测试时,如何跳过一段代码

那么我同意给出的答案。依赖注入、模拟框架绝对是进行真正单元测试的正确方法

但是,如果问题是:

在使用JUnit(或其他单元测试框架)时,如何跳过一段代码

那么我想答案是“视情况而定”。有时,我使用JUnit进行集成测试——在测试服务器上运行的客户端代码片段,可以省去通过GUI手动执行这些客户端测试的麻烦。在这种情况下,我使用系统属性,例如在我的基类中,我有:

protected boolean skipTest()
{
    String port = System.getProperty("jersey.test.port");
    // don't run this test unless developer has explicitly set the testing properties
    // this is an integration test, not a unit test
    return port == null;
}
然后在实际的测试类中,它如下所示:

// verify a successful login
@Test
public void testLogin()
{
    if (skipTest())
       return;

    // do real test

因此,我的想法是,如果您真的无法从DAO中重构Oracle内容,那么您真的是在进行集成测试,在单元测试中进行skipTest是可以的。

太棒了!它对我有用。我使用Spring3.1注入依赖项,依赖项基于运行应用程序的环境。然而,其他的解决方案也很好,这取决于场景。@Pankaj:所以你也完全按照我的方式来做。很高兴我能帮忙。