gpt4 book ai didi

java - 防止调用构造函数 - Mockito

转载 作者:行者123 更新时间:2023-12-01 20:00:05 25 4
gpt4 key购买 nike

假设我有 A 类和 B 类:

public class A {
private B b;

public A(String id){
this.b = new B(id);
}

public void doSomethingA(String id){
// do somethingA
}

}

public class B{
public B(String id){
// call anotherThing (id)
}

public void doSomethingB(){
//somethingB
}
}

现在我想测试 classA 中的方法(及其实例),但想模拟 classB

Mockito允许我模拟classB,但是当我实例化classA时,构造函数调用classB(我想避免)

有没有办法只模拟构造函数(classA 或 classB)而不模拟其他方法?

最佳答案

您可以 mock 任何 B反对,但你不想。
你想 mock B b A的领域类。
这是不同的。
您必须重构您的设计并执行 B实例化依赖项而不是内部处理。

一种简单的方法是直接传递 B 变量而不是 String作为参数:

public class A {
private B b;

public A(B b){
this.b = b;
}

public void doSomethingA(String id){
// do somethingA
}

}

现在 mock 是直接的:

@Mock B b;

public void test(){
A a = new A(b);
}

另一种方法是使用 Function<String, B> .

public class A {
private B b;

public A(Function<String, B> bFunction, String id){
this.b = bFunction.apply(id);
}

public void doSomethingA(String id){
// do somethingA
}

}

mock 变得如此:

@Mock B b;

public void test(){
A a = new A(s-> b, "anyValue");
}

实现代码可以将 A 实例化为:

A a = new A(B::new, "id");

关于java - 防止调用构造函数 - Mockito,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48310157/

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