gpt4 book ai didi

java - 使用私有(private)字段和@PostConstruct对Spring boot服务进行单元测试

转载 作者:行者123 更新时间:2023-12-01 19:47:02 27 4
gpt4 key购买 nike

我有一个这样定义的 Spring boot 服务

@Service
public class MyService {
private String field1;
private String field2;

@Autowired
private AnotherService anotherService

@PostConstruct
public void init() {
anotherService.initField1(field1);
anotherService.initField2(field2);
}

public String foo() {
return field1 + field2;
}
}

我应该如何为 foo 编写单元测试。好吧,更多的是关于如何处理类字段和 PostConstruct 方法。

谢谢!!

编辑: 还添加了 AnotherService 作为字段。

最佳答案

以下示例显示了一个 @Service Bean,它使用构造函数注入(inject)来获取所需的 AnotherService bean:

@Service
public class MyService {
private String field1;
private String field2;

private final AnotherService anotherService;

public MyService(AnotherService anotherService) {
this.anotherService = anotherService;
this.anotherService.initField1(field1);
this.anotherService.initField2(field2);
}

public String foo() {
return field1 + field2;
}
}

请注意,您可以省略 @Autowired,因为 MyService 有一个构造函数。请参阅here了解更多信息。

使用 Spring 进行测试
使用@RunWith ( SpringRunner.class ) 和 @SpringBootTest注入(inject) MyService 并开始使用它:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MyServiceTest {
@Autowired
private MyService service;

@Test
public void testFoo() {
String expResult = "";
String result = service.foo();
assertEquals(expResult, result);
}
}

不使用 Spring 进行测试

public class MyServiceTest2 {
private MyService service;

@Before
public void setUp() {
service = new MyService(new AnotherService.Fake());
}

@Test
public void testFoo() {
String expResult = "";
String result = service.foo();
assertEquals(expResult, result);
}
}

这里FakeAnotherService接口(interface)的假实现,它允许您进行纯单元测试。

关于java - 使用私有(private)字段和@PostConstruct对Spring boot服务进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52833014/

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