【问题标题】:Can mock private method of supper class with jmockit可以用jmockit模拟晚饭班的私有方法
【发布时间】:2016-07-13 19:07:44
【问题描述】:

这是我的问题:我正在测试扩展 SuperClass 的 UnderTest 类。 SuperClass 有一个私有映射(“myMap”)和一个能感知它的私有方法。当我使用 new() 构造函数创建 UnderTest 类的实例时,超类的 myMap 未初始化(实际上这是由整个系统的框架完成的,由于测试原因我无法这样做)。 运行测试时我收到 NullPointerException 因为 map == null; 我试图用 invoke() 模拟该方法,但我做错了,因为我仍然得到相同的异常。我的错在哪里

public class UnderTest extends SuperClass
{
  public void methodUnderTest()
  {....
    put(str, obj);
  ....}
}

public class SuperClass 
{
  private Map<String, Object> myMap;

  private void innerMethod (String str, Object obj)
  {....    myMap.put(str, obj);}

}

该类使用 jmockit 运行

Class ThestSomething{

@Mocked
SuperClas superClass;

@BeforeMethod
public void setUp
{
UnderTest underTest = new UnderTest();
}


@Test
public void testThis()
{
new Expectetions {{ invoke("superClass", "innerMethod", str, obj); }};
}

【问题讨论】:

    标签: jmockit


    【解决方案1】:

    不要模拟,而是创建一个正确初始化的测试对象:

    public class ExampleTest {
        @Tested HashMap<String, Object> myMap;
        @Tested(fullyInitialized = true) UnderTest underTest;
    
        @Test
        public void example() {
            underTest.methodUnderTest();
    
            assertEquals(<expected value>, myMap.get("expected key"));
            // other assertions...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      相关资源
      最近更新 更多