如何使用不同的@RunWith() 为 类 编写单个测试运行器?

How to write single test runner for classes with different @RunWith()?

我写了简单的方法在我的测试中执行测试classes:DataContainerTest.class,AnotherTest.class。

public static void main(String [] args) throws Exception {
        Result result = JUnitCore.runClasses(DataContainerTest.class, AnotherTest.class);
        System.out.println(result.getRunCount());

        System.out.println("Total number of tests " + result.getRunCount());
        System.out.println("Total number of tests failed: " + result.getFailureCount());

        for(Failure failures : result.getFailures()){
            System.out.println(failures.getMessage());
        }

        System.out.println(result.wasSuccessful());
    }

这种方法适用于我的另一个classCommandsTest.class,我正在使用注释 @RunWith(PowerMockRunner.class)。请参阅下面的输出:

1
Total number of tests 1
Total number of tests failed: 1
No runnable methods
false

这是 CommandsTest.class

的示例
@RunWith(PowerMockRunner.class)
@PrepareForTest({Helper.class,
                UtilsPlatform.class,
                SessionManager.class,
                DataContainerTest.class,
                FieldObserver.class,
                android.util.Log.class})
public class CommandsTest {

    private static Commands2 commands;
    private static License mockedLicense;
    private static HSQL hsql;

    @BeforeClass
    public static void setUpStatic() throws Exception {
        commands = new Commands2();

        PowerMockito.mockStatic(UtilsPlatform.class);
        PowerMockito.when(UtilsPlatform.isTablet()).thenReturn(true);
        PowerMockito.mockStatic(android.util.Log.class);
        PowerMockito.mockStatic(FieldObserver.class);
        PowerMockito.doNothing().when(FieldObserver.class, "put", Mockito.anyInt(),
                Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(), Mockito.any(Session.class));

        hsql = PowerMockito.mock(HSQL.class);
        PowerMockito.when(hsql, "OnCaseOpen", Mockito.anyInt(), Mockito.anyInt(),
                Mockito.anyInt()).thenReturn(false);

        mockedLicense = PowerMockito.mock(License.class);
    }

    @Before
    public void setUp() throws Exception {
        PowerMockito.mockStatic(SessionManager.class);
        PowerMockito.mockStatic(Helper.class);
        PowerMockito.doNothing().when(Helper.class, "writeToFile", Mockito.anyString(),
                Mockito.any(SocketException.class));
        PowerMockito.when(Helper.class, "getLicense").thenReturn(mockedLicense);
        PowerMockito.doNothing().when(Helper.class, "fieldOpened", Mockito.anyString(), Mockito.anyString());
    }


    @Test
    public void sendKeyCombinationEventTest_nullParameters_returnOne(){
        Assert.assertEquals(1, commands.sendResponse());
    }

    @Test
    public void sendKeyCombinationEventTest_registredGuisNotNullAndOneIsLocal_returnOne(){
        Assert.assertEquals(1, commands.sendKeyCombinationEvent());
    } 

在 AndroidStudio 中按下 运行 按钮 时,所有测试都通过了,但我自己的 TestRunner 无法在此 class 中进行 运行 测试。

使用 @RunWith(PowerMockRunner.class) 注释处理 类 的最佳方法就是 将它们放入 android 项目的默认测试源 ,然后运行 所有测试都通过 gradle test。您实际上不需要编写自己的测试 运行ner。