gpt4 book ai didi

java - 如何使用 JUnit 测试 FacesContext 显示消息

转载 作者:行者123 更新时间:2023-12-01 09:52:18 25 4
gpt4 key购买 nike

abort()-方法:

public void abort() {
LOG.info("some-text");
warning("some-text");
}

警告()-方法:

 public void warning(String message) {
FacesContext.getCurrentInstance()
.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "INFO:", message));
}

我想为中止编写一个测试用例,它只是验证没有任何更改,而第二个测试用例则验证 warning() 是否正常工作。我知道这两种方法不需要单元测试,但我想知道这是否可能。用于显示 p:message 的 UI-Test 运行良好,但我想先通过 Unittest 检查标题、类型和消息,因为它运行得更快。

最佳答案

仅使用 JUnit 4.11 的工作解决方案

在自己的类中将内容与 warning() 分开,如下所示:

@Named
@RequestScoped
public class Resources {
@Produces
public FacesContext produceFacesContext() {
return FacesContext.getCurrentInstance();
}
}

接下来,您需要定义一个 ArgumentCaptor,它可以捕获 JUnit 测试的 FacesMessage。我已将其创建为 clss 成员,它将在 @before 部分中初始化并在 @teardown 中获取 null 值。

private ArgumentCaptor<FacesMessage> facesMessageCaptor;
@Before
public void setUp() {facesMessageCaptor = ArgumentCaptor
.forClass(FacesMessage.class);
}
@After
public void tearDown() { facesMessageCaptor = null; }

现在你只需要添加两个@Mocks到你的测试类

@Mock
Resources resourcesMock;
@Mock
FacesContext facesContextMock;

所以你做到了!像这样编写测试:

Mockito.doReturn(facesContextMock).when(resourcesMock).produceFacesContext();
// Execute Method
cut.warning("SOME_DETAIL_TEXT");
// Verify interactions with the Resources and Faces and maybe others...
verify(resourcesMock).produceFacesContext();
verify(facesContextMock).addMessage(Mockito.anyString() ,
facesMessageCaptor.capture());
verifyNoMoreInteractions(...., resourcesMock, facesContextMock);
// write assert (i´ve used hamcrast-corematchers - more readable)
actualMessage = (FacesMessage) facesMessageCaptor.getValue();
assertThat(FacesMessage.SEVERITY_WARN, is(equalTo(actualMessage.getSeverity())));
assertThat(MY_TITLE, is(equalTo(actualMessage.getSummary())));
assertThat("DETAIL_TEXT", is(equalTo(actualMessage.getDetail())));

关于java - 如何使用 JUnit 测试 FacesContext 显示消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37529108/

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