gpt4 book ai didi

jmockit - 如何使用 jmockit 模拟嵌套类的构造函数

转载 作者:行者123 更新时间:2023-12-04 04:35:58 26 4
gpt4 key购买 nike

我正在尝试使用 JMockit 对 Android 应用程序进行单元测试。这有点棘手,因为在本地 JVM 中执行测试意味着所有 Android 类都是 stub ,但您可以模拟它们,这不是问题。

但现在我想测试嵌套类中的方法,该类是 ResultReceiver 的子类。这个类嵌套在一个 Fragment 中。问题是,当我创建这个嵌套类时,我想模拟它的构造函数,因为它会引发异常(它是一个 stub )。我试图隔离代码,但问题不在于 Android,而在于类结构。例子:

基类:

public class JM_base {
int m_i;

public JM_base(int i) {
m_i = i;
}
}

嵌套类:
public class JM_nested_class_cons {
public class Nested extends JM_base {
public Nested(int i) {
super(i);
}
public void methodToTest() {
System.out.print("System under test!");
}
}
}

测试:
public class Test_JM_nested_class_cons {
@Mocked JM_nested_class_cons mock;

@Test
public void test() {
new MockUp<JM_nested_class_cons.Nested>() {
@Mock public void $init(int i) {
System.out.println("Hi!");
}
};

JM_nested_class_cons.Nested t = mock.new Nested(1);
t.methodToTest();
}
}

据我所知,永远不应该调用 Nested() 的“真正”构造函数,并且“嗨!”应该出现在控制台中,对吗?我究竟做错了什么 ?

谢谢

最佳答案

这里的问题是 MockUp款待 JM_nested_class_cons.Nested作为一个常规的、非内部的类。因此,没有考虑到每个构造函数都有一个隐藏的外部对象的第一个参数( JM_nested_class_cons )。

解决方法是在 @Mock 中显式声明这个额外的参数。内部类构造函数的方法:

@Mock
void $init(JM_nested_class_cons outer, int i) {
System.out.println("Hi!");
}

关于jmockit - 如何使用 jmockit 模拟嵌套类的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19752732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com