というラベルのと1つのxhtmlページというlabel.xhtmlと呼ばれるクラスのJSFプロジェクトがあります。 label.xhtmlでは、メソッドLabel.getValue()が注入によって呼び出されます。テストLabelTestは埋め込みコンテナを実行し、テストメソッドlabel.xhtmlが要求され、本文の内容がチェックされます。これまでのところすべて問題ありませんが、Label.valueの値を自分のテストで変更したいので、テストではクラスのラベルのPostconstruct-methodの値ではなく、自分の設定値をアサートできます。埋め込みオブジェクトを使用したJSFテスト:注入オブジェクトの操作
クラスのコンストラクタにブレークポイントを設定します。です。だから私はスタックトレースを見ることができ、私はこれらのメソッドの多くのコードを読んでいます。おそらくそれは私がそこに置くことができるので、生産クラスを変更することは可能ですAbstractProducer何らかの形でですか?
Code on GitHubまたはスクロールダウンします。注釈@Specializesを使用したりServletFilterを使用して:
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named
@RequestScoped
public class Label {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@PostConstruct
public void fillValue() {
setValue("HELLO");
}
}
import org.apache.tomee.embedded.EmbeddedTomEEContainer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import javax.ejb.embeddable.EJBContainer;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.assertEquals;
public class LabelTest {
private WebDriver driver;
@Before
public void setup() {
driver = new HtmlUnitDriver();
Map<Object, Object> properties = new HashMap();
properties.put(EJBContainer.PROVIDER, EmbeddedTomEEContainer.class);
properties.put(EJBContainer.MODULES, new File[]{new File("src/main/webapp/")});
properties.put(EJBContainer.APP_NAME, "hfe");
System.setProperty("tomee.webapp.externalRepositories", "build/classes/main,build/classes/test");
EmbeddedTomEEContainer.createEJBContainer(properties);
}
@After
public void cleanup() {
driver.close();
}
@Test
public void requestHtmlPage_ThenBodyContainsPostConstructValue() {
assertEquals("HELLO", getBodyValue());
}
@Test
public void manipulateInjectedObjectAndRequestHtmlPage_ThenBodyContainsValueOfManipulatedInjectedObject() {
// how is it possible to manipulate the injected object with value=MY_VALUE?
assertEquals("MY_VALUE", getBodyValue());
}
private String getBodyValue() {
driver.get("http://localhost:8080/hfe/faces/label.xhtml");
WebElement body = driver.findElement(By.tagName("body"));
return body.getText();
}
}
label.xhtml
<html>
<h:body>
#{label.value}
</h:body>
</html>