Java 在不重写测试方法的情况下为子类运行JUnit测试

Java 在不重写测试方法的情况下为子类运行JUnit测试,java,intellij-idea,junit,Java,Intellij Idea,Junit,如果我有一个定义JUnit测试方法的任意类,以及一个覆盖测试行为但不覆盖实际测试方法本身的子类,那么可以直接在IntelliJ中运行ChildClass测试吗 class ParentClass { @Test public void testSomeBehavior() { doTest(); } protected void doTest() { // ParentClass specific behavior

如果我有一个定义JUnit测试方法的任意类,以及一个覆盖测试行为但不覆盖实际测试方法本身的子类,那么可以直接在IntelliJ中运行ChildClass测试吗

class ParentClass
{
    @Test
    public void testSomeBehavior()
    {
        doTest();
    }

    protected void doTest()
    {
        // ParentClass specific behavior
    }
}

class ChildClass extends ParentClass
{
    @Override
    protected void doTest()
    {
        // ChildClass specific behavior
    }
}
我当前的解决方法是在类级别(ChildClass)启动运行,终止运行,然后从运行/调试屏幕手动选择我的测试。但这并不理想


我知道如果我的父类被定义为抽象类,那么IntelliJ会给我一个可以运行给定测试的可能实现类的列表。但当父类是可实例化的时,我看不到该选项。

我不明白您为什么要这样做。。。 不建议这样做。但是,如果您对使用JUNIT5创建嵌套测试感兴趣,也许可以使用此文档


我强烈建议不要以这种方式扩展测试类。如果您想重用代码,请创建一个库或其他东西。测试中的一些冗余代码并不是一件丢脸的事(我是您可能遇到的最强的干性倡导者)。如果需要两组行为稍有不同的相同测试来测试父级和子级,请稍微对测试进行参数化。从长远来看,没有什么比继承更糟糕的了。这是为了工作,所以我没有重构的选择。我不是在要求新的测试开发,而是在调试和与遗留测试交互时要求更多的QOL。它永远都不容易运行。对于最少的工作,您可以尝试将测试复制到两个单独的测试中,然后稍微修改它们以处理您正在测试的不同类,这样会更容易。如果你真的不能——祝你好运!问题不在于编写嵌套测试,而在于运行已经开发的嵌套测试。