【问题标题】:How to test class with local connection to EJB如何通过本地连接到 EJB 来测试类
【发布时间】:2013-05-15 20:17:28
【问题描述】:

我遇到了测试类的问题,该类在构造函数中实现了与 EJB 的一些本地连接。此连接仅在构造函数内部使用,并设置实例化类的一些私有属性。

我要测试的MyClass:

public class MyClass {

  private String myValue;

  public MyClass() throws Exception {
    MyBeanLocal local = EJBFactory.getLocal(MyBeanLocal.class);
    myValue = local.fetchValue();
  }

  public void processValue() {
    ... do some String magic which should be tested ...
  }

  public String getValue() {
    return myValue;
  }

}

EJBFactory 包含一些增强的查找(带有缓存)并且可以返回本地或远程连接(远程需要服务器位置)。

MyBeanLocal 接口

public interface MyLocalBean {
  public String fetchValue();
}

最后是我想要测试 MyClass.processValue 方法的 junit 类:

public class MyClassTest {

  private MyClass myClass;

  @Before
  public void setUp() {
    myClass = new MyClass();
  }

  @Test
  public void testProcessValue() {
    Assert.assertEquals(myClass.processValue(), "MY EXPECTED VALUE");
  }

}

问题是当我在本地机器(或一些自动测试机器,如 Hudson 或 Jenkins)上运行 JUnits 并且 bean 在与我的本地不同的应用程序服务器上下文中运行时如何测试情况。我不能接触生产代码,只需要编写测试。

其实我不需要让 MyBeanLocal 起作用,但我需要设置 myValue。

我正在考虑嘲笑,但我不熟悉。

【问题讨论】:

    标签: java unit-testing mocking ejb junit4


    【解决方案1】:

    在测试涉及数据库连接的类时,模拟通常是最好的方法。 有几个框架可以让模拟对象变得更加容易,其中之一是 Mockito

    你可以找到更多关于它的信息here

    Martin Fowler 还写了一篇很好的文章,介绍了何时使用模拟以及模拟和存根之间的区别。这是文章的a link

    【讨论】:

      【解决方案2】:

      您可以使用 JMockit 模拟 API(我创建的)进行此类测试:

      public class MyClassTest
      {
          @Tested MyClass myClass;
      
          @Test
          public void processValue() {
              new NonStrictExpectations() {
                  @Mocked EJBFactory fac;
                  @Mocked MyBeanLocal mb;
      
                  {
                      EJBFactory.getLocal(MyBeanLocal.class); result = mb;
                      mb.fetchValue(); result = "SOME VALUE";
                  }
              };
      
              assertEquals(myClass.processValue(), "MY EXPECTED VALUE");
          }
      }
      

      EJBFactory 的模拟甚至可以省略,如果它在单元测试环境中仍然返回一个对象。

      【讨论】:

        猜你喜欢
        • 2021-09-30
        • 2011-01-28
        • 2015-10-14
        • 1970-01-01
        • 1970-01-01
        • 2020-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多