gpt4 book ai didi

java - 在 Spring 测试中模拟依赖项的 Autowiring 依赖项

转载 作者:行者123 更新时间:2023-12-02 10:08:56 25 4
gpt4 key购买 nike

我试图在我的测试中模拟依赖项的依赖项。下面是我的类(class)的样子。

class A {
@Autowired B b;
@Autowired C c;

public String doA() {

return b.doB() + c.doC();
}
}

class C {
@Autowired D d;

public String doC() {

return d.doD();
}
}

class D {

public String doD() {

return "Hello";
}
}

我试图在调用方法 doA() 时模拟 D 类中的方法 doD();但是,我不想模拟 B 类中的 doB() 方法。下面是我的测试用例。

@RunWith(SpringRunner.class)
@SpringBootTest(
classes = MyTestApplication.class,
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
)
public class ATest {

@Autowired
private A a;

@InjectMocks
@Spy
private C c;

@Mock
private D d;

@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}

@Test
public void testDoA() {

doReturn("Ola")
.when(d)
.doD();

a.doA();
}
}

这最终仍然返回“Hello”而不是“Ola”。我也在测试类中尝试了 A 上的@InjectMocks。但这只会导致 Autowiring 的 B 依赖项 B 为空。我的设置是否缺少某些内容,或者解决此问题的方法是否错误?

谢谢。

最佳答案

使用@MockBean,因为这会在执行测试方法之前将模拟bean注入(inject)到应用程序上下文中docs .

Annotation that can be used to add mocks to a Spring ApplicationContext. Can be used as a class level annotation or on fields in either @Configuration classes, or test classes that are @RunWith the SpringRunner.

@RunWith(SpringRunner.class)
@SpringBootTest(
classes = MyTestApplication.class,
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

public class ATest {

@Autowired
private A a;

@MockBean
private D d;

@Test
public void testDoA() {

doReturn("Ola")
.when(d)
.doD();

a.doA();
}
}

关于java - 在 Spring 测试中模拟依赖项的 Autowiring 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55134162/

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