测试用例(场景)——一种还是多种方法?
Test use case (scenario) - one or multiple methods?
我想测试我的 android 应用程序的一个用例(场景)。它应该模拟用户对应用程序的使用。编写一个测试方法和代码测试整个用例是否更好,还是我应该为每个部分创建单独的方法(在这种情况下,测试必须按特定顺序进行)?
示例:
public void test() {
//click or button (open new activity)
//check if activity is opened
//open firm selection (open new activity)
....
}
或
public void test1(){
//click or button (open new activity)
//check if activity is opened
}
public void test2(){
//open firm selection (open new activity)
}
...
public void testX(){
//file at the end is created
}
什么是更好的方法,为什么?
你写的好像是UI用户场景测试。
严格来说,这不是单元测试,所以你不应该试图在不同的测试方法中人为地拆分处理。
这样做会出错,因为每个测试方法都会更新应用程序的状态,并且可能依赖于先前测试所做的更改。您会得到必须按特定顺序进行的耦合测试,第一个测试的更改会对其他测试产生影响。
例如,第三个执行的测试可能会因为第一个或第二个或两者的链接而失败。怎么猜到这种事?
因此,通过不同的用户故事/用例实例定义单个测试方法似乎确实是正确的方式,并且使事情变得更加清晰。
The basic Espresso example 在他们的网站上是这样的:
@Test
public void greeterSaysHello() {
onView(withId(R.id.name_field)).perform(typeText("Steve"));
onView(withId(R.id.greet_button)).perform(click());
onView(withText("Hello Steve!")).check(matches(isDisplayed()));
}
我会做以下事情:
- 为单元中的每个方法编写单元测试(例如,通常是 class)。为每个测试用例使用自己的测试(类似于
myTestMethod_withNegativInput()
& myTestMethod_withPositiveInput()
)。您使用这些测试来测试您的单元是否完成了它应该做的事情。
- 编写一些集成测试,其中包括应用程序的更多层(例如,服务的集成测试,它使用来自持久层的一些方法)。您使用这些测试来验证您的应用程序层是否协同工作)。 (同样在这里,您正在测试 class 的一种方法)
所以我会建议你的 2. 方法。
我想测试我的 android 应用程序的一个用例(场景)。它应该模拟用户对应用程序的使用。编写一个测试方法和代码测试整个用例是否更好,还是我应该为每个部分创建单独的方法(在这种情况下,测试必须按特定顺序进行)?
示例:
public void test() {
//click or button (open new activity)
//check if activity is opened
//open firm selection (open new activity)
....
}
或
public void test1(){
//click or button (open new activity)
//check if activity is opened
}
public void test2(){
//open firm selection (open new activity)
}
...
public void testX(){
//file at the end is created
}
什么是更好的方法,为什么?
你写的好像是UI用户场景测试。
严格来说,这不是单元测试,所以你不应该试图在不同的测试方法中人为地拆分处理。
这样做会出错,因为每个测试方法都会更新应用程序的状态,并且可能依赖于先前测试所做的更改。您会得到必须按特定顺序进行的耦合测试,第一个测试的更改会对其他测试产生影响。
例如,第三个执行的测试可能会因为第一个或第二个或两者的链接而失败。怎么猜到这种事?
因此,通过不同的用户故事/用例实例定义单个测试方法似乎确实是正确的方式,并且使事情变得更加清晰。
The basic Espresso example 在他们的网站上是这样的:
@Test
public void greeterSaysHello() {
onView(withId(R.id.name_field)).perform(typeText("Steve"));
onView(withId(R.id.greet_button)).perform(click());
onView(withText("Hello Steve!")).check(matches(isDisplayed()));
}
我会做以下事情:
- 为单元中的每个方法编写单元测试(例如,通常是 class)。为每个测试用例使用自己的测试(类似于
myTestMethod_withNegativInput()
&myTestMethod_withPositiveInput()
)。您使用这些测试来测试您的单元是否完成了它应该做的事情。 - 编写一些集成测试,其中包括应用程序的更多层(例如,服务的集成测试,它使用来自持久层的一些方法)。您使用这些测试来验证您的应用程序层是否协同工作)。 (同样在这里,您正在测试 class 的一种方法)
所以我会建议你的 2. 方法。