测试用例(场景)——一种还是多种方法?

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

我会做以下事情:

  1. 为单元中的每个方法编写单元测试(例如,通常是 class)。为每个测试用例使用自己的测试(类似于 myTestMethod_withNegativInput() & myTestMethod_withPositiveInput())。您使用这些测试来测试您的单元是否完成了它应该做的事情。
  2. 编写一些集成测试,其中包括应用程序的更多层(例如,服务的集成测试,它使用来自持久层的一些方法)。您使用这些测试来验证您的应用程序层是否协同工作)。 (同样在这里,您正在测试 class 的一种方法)

所以我会建议你的 2. 方法。