【问题标题】:use of singleton class to call a method in junit test cases in javajava中junit测试用例中使用单例类调用方法
【发布时间】:2013-11-22 07:29:38
【问题描述】:

我对 java 和 junit 很陌生。 我在 test/pagetests 下有一些测试用例,例如 addTest.java 、 deleteTest.java。 我使用下面的代码将这些测试包含在 junit 测试套件中

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({
addTest.class,
deleteTest.class
})
public class JunitTestSuite {  
}  

所有这些测试用例都使用来自 db 的输入。为此,我在 TestDBMethods.java 中编写了一个名为 getValues 的方法,该方法位于路径 test/testdb 中,它返回我在测试用例中需要的所有值。

我面临的问题是我不想在每个测试用例中调用 TestDBMethods.java 类,因为这非常昂贵。所以我更喜欢包含一个单例类,它只调用一次 TestDBMethods.java 并返回一个应该由所有其他测试用例使用的实例。 谁能帮我为调用TestDBMethods.java类并返回一个实例的单例类编写代码。

【问题讨论】:

  • 看来需要使用setup方法:stackoverflow.com/questions/512184/…
  • 但是,您的单元测试不应该查询数据库并获取测试值,因为单元测试应该快速运行。您不能将这些测试值嵌入到测试类本身中吗?

标签: java database class junit singleton


【解决方案1】:

从你的描述来看,由于调用TestDBMethods很昂贵,所以你可以将TestDBMethods实现为一个单例类,而不是调用TestDBMethods的类。

据我所知,我们有很多方法可以实现单例..下面只是一个非常简单的例子:

 public class TestDBMethods{  
      private static TestDBMethods instance;  
      private TestDBMethods(){}   
     public static TestDBMethods getInstance() {  
      if (instance == null) {  
          instance = new TestDBMethods();  
     }  
      return instance;  
      }

  public Object getValues(){
      return null;
  }  
 }  

这样,你只需使用TestDBMethods.getInstance.getValue()调用getValue()函数,内存中只存在一个实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多