我不知道如何为这些后续类编写测试,特别是对于Controller和Model。是否可以使用jUnit进行测试? 我从Selenium那里听到,但首先我会用jUnit进行测试。感谢您的帮助和最好的问候。
Controller.class:
import factory.InfoMessageFactory;
import entity.Product;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import model.ProductModel;
import project.Konstanten;
@Named(value = "ProductController")
@SessionScoped
public class ProductController implements Serializable {
private Product product;
@Inject
private ProductModel model;
@PostConstruct
public void init() {
this.product = new Product();
}
public String addProduct() {
this.model.newProduct(this.product);
}
public Product getProduct() {
return product;
}
public void setProdukt(Product product) {
this.product = product;
}
public List<Product> getProducts() {
return this.model.getProducts();
}
}
&#13;
Model.class
package model;
import ejb.DB;
import entity.Product;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
@Dependent
public class ProductModel implements Serializable{
@Inject
private DB db;
public boolean addProduct(Product p){
try{
db.persist(p);
}catch(Exception e){
System.out.println("Blablabla");
return false;
}
return true;
}
}
&#13;
和DB.class
@Stateless
public class DB {
@Inject
@RealClass
private EntityManager em;
public void persist(Object object) {
em.persist(object);
}
&#13;
答案 0 :(得分:0)
在ProductController
中,测试真的不多..除非你有更多的逻辑没有发布。
为了测试ProductModel
或任何具有DB
依赖关系的类似服务的类,我建议将一个项目依赖项添加到其中一个模拟框架中(我建议使用Mockito,因为它是最成熟的他们都。)
对于addProducts
方法,您最终可能会接受以下测试:
import static org.mockito.Mockito.*;
import org.junit.Test;
import org.mockito.MockitoAnnotations;
public class ProductModelTest{
@Mock
private DB dbMock;
@InjectMocks
private ProdcutModel = new ProductModel();
@Before
public void init(){
MockitoAnnotations.iniMocks(this);
}
@Test
public void shouldReturnTrue_whenEntityPersisted(){
doNothing().when(dbMock).persist(any(Product.class));
boolean result = productModel.addProduct(new Product());
assertTrue(result);
}
@Test
public void shouldReturnFalse_whenEntityPersisted(){
doThrow(RuntimeException.class).when(dbMock).persist(any(Product.class));
boolean result = productModel.addProduct(new Product());
assertFalse(result);
}
}
关于类似DB的存储库类...我通常不对它们进行单元测试。如果是这样我就对它们进行集成测试。