gpt4 book ai didi

unit-testing - 使用 Thymeleaf 模板引擎对服务进行单元测试时出现问题

转载 作者:行者123 更新时间:2023-12-05 00:15:44 24 4
gpt4 key购买 nike

对我的服务进行单元测试时出现 nullPointerException,但我不明白为什么?我正在使用 Spring Boot。
这是我提供模板的简单服务。我 Autowiring 了 TemplateEngine 组件。

@Service
public class TicketTemplatingService implements ITemplatingService{

@Autowired
private TemplateEngine templateEngine;

/**
* This method will return a ticket template
*/
@Override
public String buildHtmlTemplating(Object object, String templateName) {
Ticket ticket= (Ticket)object;
//Build the template
Context context = new Context();
context.setVariable("id", ticket.getId());
context.setVariable("date", ticket.getDate());
return templateEngine.process(templateName, context);
}

}

该类的单元测试如下:
@SpringBootTest
@RunWith(SpringRunner.class)
@ActiveProfiles("test")
public class TemplatingServiceTest {


@InjectMocks
private TicketTemplatingService ticketTemplatingService;

@Mock
private TemplateEngine templateEngine;

@Before
public void setup(){
MockitoAnnotations.initMocks(this);
}

@Test
public void testHtmlTemplateReturnTheHtmlTemplate(){
Ticket ticket= new Ticket();
ticket.setId(1L);
Date date=new Date();
ticket.setDate(date);

Context context=new Context();
context.setVariable("id", 1L);
context.setVariable("date", date);

//Mock the process method of the templateEngine bean
when(templateEngine.process("TemplateName", refEq(context))).thenReturn("Html template result");

//Now we can test the method
String htmlTemplate=ticketTemplatingService.buildHtmlTemplating(ticket, "TemplateName");
assertThat(htmlTemplate).isEqualTo("Html template result");
}
}

在这个测试类中,templateEngine 变量模拟返回 null,然后我在执行此操作时得到 nullPointerException “when(templateEngine.process("TemplateName", refEq(context))).thenReturn("Html template result");"

请问你能帮我吗?我真的不明白为什么。

最佳答案

代替

@Autowired
private TemplateEngine templateEngine;

在您的服务中使用此接口(interface)。
import org.thymeleaf.ITemplateEngine;

@Autowired
private ITemplateEngine templateEngine;

并在您的测试类中使用与 Mock 相同的类
@Mock
private ITemplateEngine emailTemplateEngine;

@Before
public void setup(){
@when(emailTemplateEngine.process(eq(TEMPLATE_USER_CREATION), any(Context.class))).thenReturn(userCreationHtml);
.
.
.
}

关于unit-testing - 使用 Thymeleaf 模板引擎对服务进行单元测试时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43656246/

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