【问题标题】:How to mock the InitialContext class with jmockit?如何用 jmockit 模拟 InitialContext 类?
【发布时间】:2008-10-06 15:53:54
【问题描述】:

我在我的测试中使用 jmockit,我想测试一个类,直接使用 InitialContext。所以我有以下内容:

public class MyClass {
  public void myMethod() {
    InitialContext ic = new InitialContext();
    javax.mail.Session mailSession = ic.lookup("my.mail.session");

    // rest of method follows.....
  }

在我的测试用例中,我称之为使用我的“模拟”InitialContext 类:

Mockit.redefineMethods(InitialContext.class, MockInitialContext.class);

使用 jmockit 模拟 InitialContext 类的最佳方法是什么。

我已经尝试了几种方法(例如使用我自己的MockInitialContextFactory),但总是遇到同样的错误:

NoClassDefFoundError: my.class.MockInitialContext

根据我在 Google 上看到的情况,使用 JNDI 进行模拟是非常讨厌的。请任何人都可以为我提供一些指导,或指出我的解决方案吗?那将不胜感激。谢谢。

【问题讨论】:

    标签: java jndi mocking jmockit


    【解决方案1】:

    距离有人在这里发帖已经一年了,但最近我一直在使用 JMockit 模拟 EJB 调用,我觉得分享是正确的。 (虽然我没有测试过,但代码应该很相似)

    您可以在 TestCase 中定义一些 Mocked 对象作为字段,例如:

    @Mocked InitialContext mockedInitialContext;
    @Mocked javax.mail.Session mockedSession;
    

    然后在你的 testXXX 方法中你可以定义你的 Expectations(),这样做之后只需要调用你想要测试的方法即可。

    public void testSendindMail(){
         new Expectations(){
            {
        mockedInitialContext.lookup("my.mail.session");returns(mockedSession);    
         }
          };
        MyClass cl = new MyClass ();
        cl.MyMethod();//This need JNDI Lookup
    }
    

    【讨论】:

      【解决方案2】:

      一般来说,要模拟 JNDI,您需要使用一个框架,例如 EJBMock,它可以提供一个模拟容器来部署您的 bean。

      另一种选择是从代码中重构创建上下文,以便传入(这是依赖注入重构),然后您应该能够随意替换模拟。

      【讨论】:

        【解决方案3】:

        您收到 NoClassDefFoundError 是因为 my.class.MockInitialContext 不存在。如果要将其作为参数传递给 Mockit.redefineMethods(),则需要创建该类。您的 MockInitialContext 类只需要一个名为 lookup() 的方法,该方法接受一个字符串参数并返回一个 javax.mail.Session。

        我喜欢JMockit annotations,但您可以查看该页面的其余部分,了解如何使用 JMockit 的其他示例。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-19
          • 1970-01-01
          • 2012-06-29
          • 1970-01-01
          • 2016-05-26
          • 2011-05-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多