gpt4 book ai didi

java - 使用 Mockito 对 Java Play 框架中的服务类进行单元测试

转载 作者:搜寻专家 更新时间:2023-11-01 03:25:38 25 4
gpt4 key购买 nike

我开始使用 Mockito 对我用于连接到我的数据存储的一些服务类进行一些测试。我现在想确定为其编写测试的最佳实践方式。原则是对于每个实体,都有一种方法可以从特定实体的数据存储(mongo/mysql 等)中列出、添加、删除等行。

参加这门课,让我可以与存储公司列表的数据库对话

public class CompanyService extends Service{
public CompanyService() {
...
}

public saveCompany(Company company) {
...
}

// get a list of all companies
public List<Company> getCompanies() {

List<Company> companies = new ArrayList<Company>();

try {
CompanyResult<Rows<String, String>> rows = db.query(....);

for (Row<String, String> row : rows.getResult()) {
companies.add(row.getColumns());
}
catch (Exception e){
logger.warn("Error retrieving companies", e);
}

}

}

我究竟应该在 getCompanies 方法中测试什么以及我如何使用 Mockito 来完成它?

最佳答案

您的被测系统是公司服务。你想测试它,假设它的所有依赖项/协作者都正常运行,它就正常运行。

db 对象看起来像是您在 getCompanies() 方法中唯一需要担心的依赖项/协作者。使用 Mockito 模拟对 db.query()

的调用

你可以像这样设置一个测试方法:

@Test
public void testGetCompanies() {
/*** Arraign ***/
CompanyService cs = new CompanyService();

// Setup mock db
DB mockDb = mock(DB.class);

// Setup fake results for query
CompanyResult<Rows<String, String>> sampleResults = ... // build sample results here

// Have query on mock return fake results
when(db.query(/* match arguments */)).thenReturn(sampleResults);

// Tell your System Under Test to use the mock collaborator
cs.setDB(mockDb);

/*** Act ***/
CompanyResult<Rows<String, String>> results = cs.getCompanies();

/*** Assert ***/
... // Test that results and sampleResults are effectively the same
}

关于java - 使用 Mockito 对 Java Play 框架中的服务类进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14631868/

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