如果测试依赖于设备,我如何为Android编写自动测试?

如果测试依赖于设备,我如何为Android编写自动测试?,android,unit-testing,junit,tdd,Android,Unit Testing,Junit,Tdd,当测试结果取决于目标设备时,编写测试的最佳方法是什么 例如,假设我有一个Android应用程序,它唯一的功能就是以像素为单位显示显示器的高度。如何测试每种不同类型的设备的结果是否会发生变化 现在,我的想法是用三到四种不同的配置测试程序。因为我知道这些测试的输出应该是什么,所以我只需要将每个设备的预期值与实际值进行比较 但是,这种测试的正确结构是什么?我是否需要为每个设备创建一个测试类?如何仅针对某些测试配置运行某些测试?(例如,如果测试是在Nexus上执行的,则执行测试a,但如果测试是在Sams

当测试结果取决于目标设备时,编写测试的最佳方法是什么

例如,假设我有一个Android应用程序,它唯一的功能就是以像素为单位显示显示器的高度。如何测试每种不同类型的设备的结果是否会发生变化

现在,我的想法是用三到四种不同的配置测试程序。因为我知道这些测试的输出应该是什么,所以我只需要将每个设备的预期值与实际值进行比较


但是,这种测试的正确结构是什么?我是否需要为每个设备创建一个测试类?如何仅针对某些测试配置运行某些测试?(例如,如果测试是在Nexus上执行的,则执行测试a,但如果测试是在Samsung do测试B上执行的)。

关于第一个问题,例如,如果您的应用程序显示屏幕高度,请使用不同的方法获取并比较结果。您可以使用
adb shell wm size
或获取设备的屏幕截图,然后获取图像大小

对于第二个问题,如果您创建的测试只适用于一个设备,那么您可以使用JUnit4,这是一组非常有用的方法,用于说明关于测试有意义的条件的假设

失败的假设并不意味着代码被破坏,而是测试没有提供有用的信息,那么您可以在测试开始时使用它

@Test
public final void testSomething() throws IOException {
    assumeThat(Build.MANUFACTURER, is(equalTo("samsung")));
    // your test here
    ...
}

关于第一个问题,例如,如果您的应用程序显示屏幕的高度,请使用不同的方法获取并比较结果。您可以使用
adb shell wm size
或获取设备的屏幕截图,然后获取图像大小

对于第二个问题,如果您创建的测试只适用于一个设备,那么您可以使用JUnit4,这是一组非常有用的方法,用于说明关于测试有意义的条件的假设

失败的假设并不意味着代码被破坏,而是测试没有提供有用的信息,那么您可以在测试开始时使用它

@Test
public final void testSomething() throws IOException {
    assumeThat(Build.MANUFACTURER, is(equalTo("samsung")));
    // your test here
    ...
}