gpt4 book ai didi

java - 我的删除操作 JUnit 测试正确吗?

转载 作者:行者123 更新时间:2023-12-01 12:56:56 29 4
gpt4 key购买 nike

我想为调用ORMLite库的删除方法的删除操作编写JUnit测试(这并不重要)。我在测试中 mock ORMLite API 的行为。但我不确定我是否创建了正确的测试以及我是否真的在测试删除操作。

所以,我定义了一些带有操作的数据源类 create(List<Object> o), read(Object o), delete (Object o) 。这是简化的代码。

class ObjectDataSource {

public void create (List<Object> o) {
ormapi.create(o);
}

public List<Object> read (Object o ) {
return ormapi.queryForMatching(o);
}

public void delete (Object o) {
ormapi.delete(o);
}

}

现在,我这里创建了JUnit测试。它正在测试对象是否真的被删除。

@Test
public void readTest() {
// ormlite api init
RuntimeExceptionDao<Object, Integer> dao = mock(RuntimeExceptionDao.class);
ObjectDbHelper dbHelper = new ObjectDbHelper(context, dao);
ObjectDataSource dataSource = new ObjectDataSource(context, dbHelper);

// data init
Object object = new Object() {{ setId(47); }};
Object completeObject = new Object {{ setId(47); setObjectName("test object"); }}
List<Object> list = ArrayList<Object>();
list.add(completeObject);

// api mocking
when(dao.queryForMatching(object)).thenReturn(new ArrayList<Object>());

// testing
dataSource.create(list);
dataSource.delete(object);
List<Object> readList = dataSource.read(object);
Assert.assertEquals(new ArrayList<Object>(), readList);
}

最佳答案

您应该检查是否已调用delete()。您可能需要类似的东西:

@Test
public void readTest() {
// ormlite api init
RuntimeExceptionDao<Object, Integer> dao = mock(RuntimeExceptionDao.class);
ObjectDbHelper dbHelper = new ObjectDbHelper(context, dao);
ObjectDataSource dataSource = new ObjectDataSource(context, dbHelper);

// data init
Object object = new Object() {{ setId(47); }};
Object completeObject = new Object {{ setId(47); setObjectName("test object"); }}
List<Object> list = ArrayList<Object>();
list.add(completeObject);

// testing
dataSource.create(list);
dataSource.delete(object);

// verify that ObjectDataSource class correctly invokes delete
// method on DAO:
verify(dao).delete(object);
}

我认为调用 dataSource.read() 并测试结果没有任何好处,因为您已经使用模拟的 DAO 对象伪造了该结果。它并没有真正告诉你任何事情。这就像设置 int x = 5;,然后检查 x 是否为 5

此外,如果您的目的是检查删除是否有效,那么您的测试的命名非常具有误导性...像 deleteTest 这样的名称可能是更好的名称:-)

关于java - 我的删除操作 JUnit 测试正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23804546/

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