gpt4 book ai didi

java - JUnit - 测试方法中使用的模拟类

转载 作者:行者123 更新时间:2023-11-29 03:30:03 25 4
gpt4 key购买 nike

两个类:

class A{
public int getValue(){
return 5;
}
}

class B{
public int getValue(){
A a = new A();
return a.getValue();
}
}

现在我想为 B 类 编写测试,但我想为该测试模拟 A 类。问题是:如何?

(这个片段只是我问题的一个简单版本,请不要小心返回 5 或 smth)

最佳答案

可能有一些棘手的方法可以做到这一点,但简而言之,您编写 B 的方式不利于模拟。不要在 B 中实例化 A,而是尝试将 A 注入(inject) B

考虑改成

class B {
private A a;
public void setA(A a) {
this.a=a;
}
public int getValue(){
return a.getValue();
}
}

您甚至可以通过 private A a = new A() 来初始化 a,但是提供一个 setter 允许您注入(inject)模拟以进行测试。


编辑:如果重写 B 使其单元测试友好有困难,您仍然可以使用将执行字节码操作的模拟框架,如 Powermock。这是实现您想要的目标的示例:

http://code.google.com/p/powermock/wiki/MockConstructor

关于java - JUnit - 测试方法中使用的模拟类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18715717/

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