我写了一个小代码来对其中一个名为"Type"的字段进行排序,现在我必须为它编写Junit测试。我是一个全新的写作测试,所以我想知道我是否考虑了多少条件。例如,我为以下内容编写了测试代码:-
- testCompareBothNull
- testComparePojo1NullPoj02NotNull
- testComparePojo1NotNullPoj02Null
- 测试比较Pojo1NotNullPoj02NotNull
。
所以我需要你的建议。我提前感谢你。
根据经验,这是关于测试的,就像一个工具,它可以帮助您程序员确保您编写的代码按预期运行。
考虑到这一点,您希望测试哪些输入,以便确保您的代码正常工作?
你说:
我写了一个小代码来对一个名为"Type"的字段进行排序
所以这段代码一定是用某种方法编写的,对吧?
假设你有这样的东西:public List<MyObject> sort(List<MyObject> input)
,你可以在以下情况下进行验证:
- 通过null,结果是什么,是预期的吗
- 通过空列表,结果是什么,是预期的吗
- Pass List有一个元素-它会排序吗
- 具有具有
MyObject#type
字段null
的元素的过程列表。结果是预期的吗 - 已排序的通行证列表/
- 未排序的通行证列表,请确保现在已排序
- 具有相同对象的过程列表
(sort(listOf(a, a, a, a))
- 带有
null-s
:(sort(null, new MyObject(..), null)
的通行证列表
总的来说,这取决于你决定你能走多远,才能感觉到代码是有效的。
由于您是单元测试框架的新手,我建议您查看数据驱动测试,即DDT
数据驱动测试通常意味着使用多组数据执行一组步骤。在这里,您可以使用DataProvider创建数据,并将它们作为参数传递给测试方法,从而避免为测试用例编写多余的代码行。
TestNG是一个流行的框架。
所以在你的场景中,你只需要写一个测试用例
@Test(dataProvider = "type-null-check-Data")
public void test(Foo foo1, Foo foo2){
//Invocation of actual code with foo1 & foo2
//The scenarios can be
// 1. foo1 is null
// 2. foo2 is null
// 3. foo1.type is null
// 4. foo2.type is null
}
场景创建如下
@DataProvider(name="type-null-check-Data")
public Object[][] dataProviderMethod() {
Foo foo1 = new Foo();
foo1.setType(null);
Foo foo2 = new Foo();
foo2.setType("anyValue);
Foo foo3 = new Foo();
foo3.setType("anyValue");
return new Object[][] {
{null, null},
{null, foo1},
{foo1, null},
{foo2, foo3},
};
}
谢谢大家。你们太棒了。非常有用的评论。现在我有了一个想法,该何去何从。我以前从未写过单元测试代码;只是手动测试页面或应用程序,所以我不确定该涵盖什么或不涵盖什么,但是的,我现在知道编写代码进行测试也是开发的重要组成部分。