如何使用jUnit在JSF项目中测试控制器和模型?

如何使用jUnit在JSF项目中测试控制器和模型?,jsf,junit,model,controller,ejb,Jsf,Junit,Model,Controller,Ejb,我不知道如何为下面这些类编写测试,特别是针对控制器和模型。可以用jUnit进行测试吗? 我听Selenium说,但首先我要用jUnit进行测试。谢谢你的帮助和问候 Controller.class: import factory.InfoMessageFactory; 进口实体、产品; 导入java.io.Serializable; 导入java.util.List; 导入javax.annotation.PostConstruct; 导入javax.enterprise.context.Se

我不知道如何为下面这些类编写测试,特别是针对控制器和模型。可以用jUnit进行测试吗? 我听Selenium说,但首先我要用jUnit进行测试。谢谢你的帮助和问候

Controller.class:

import factory.InfoMessageFactory;
进口实体、产品;
导入java.io.Serializable;
导入java.util.List;
导入javax.annotation.PostConstruct;
导入javax.enterprise.context.SessionScoped;
导入javax.faces.application.FacesMessage;
导入javax.faces.context.FacesContext;
导入javax.inject.inject;
导入javax.inject.Named;
导入模型.ProductModel;
进口项目:康斯坦顿;
@命名(value=“ProductController”)
@会议范围
公共类ProductController实现可序列化{
私人产品;
@注入
私人产品模型;
@施工后
公共void init(){
this.product=新产品();
}
公共字符串addProduct(){
this.model.newProduct(this.product);
}
公共产品{
退货产品;
}
公共无效setProdukt(产品){
本产品=产品;
}
公共列表产品(){
返回此.model.getProducts();
}

}
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存储库类。。我通常不进行单元测试。如果是这样的话,我会对它们进行集成测试。

你想进行单元测试还是集成测试?只需单元测试就可以了。更简单,因为您使用的是真实的容器,不需要模拟您不想/不需要模拟的所有内容