gpt4 book ai didi

jsf - 如何使用 jUnit 在 JSF 项目中测试 Controller 和模型?

转载 作者:行者123 更新时间:2023-12-04 06:44:31 25 4
gpt4 key购买 nike

我不确切知道如何为以下这些类编写测试,尤其是对于 Controller 和模型。是否可以使用 jUnit 进行测试?
我从 Selenium 那里听说过,但首先我会用 jUnit 进行测试。感谢您的帮助和最好的问候。

Controller 类:

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();
}
}


模型类

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;
}
}


和 DB.class

@Stateless
public class DB {

@Inject
@RealClass
private EntityManager em;

public void persist(Object object) {
em.persist(object);
}

最佳答案

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 的存储库类..我通常不对它们进行单元测试。如果我对它们运行集成测试。

关于jsf - 如何使用 jUnit 在 JSF 项目中测试 Controller 和模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42093303/

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