java - 模拟 java.lang.Exception : Class should be public when I use inner classes in tests

标签 java unit-testing mockito inner-classes

我有以下测试:

@RunWith(Enclosed.class)
public class ProductTest {

    @RunWith(MockitoJUnitRunner.class)
    @Ignore
    public static abstract class Base1 {
        @Before
        public void setUpBase()  {...}
    }

    public static class Test1 extends Base1{
        @Test
        public void foo(){...}
        }
    }

    public static class Test2 extends Base1{
        @Test
        public void bar(){...}
        }
    }
}

为了避免@Ignore,我重构类如下:

@RunWith(Enclosed.class)
public class ProductTest {

    @RunWith(MockitoJUnitRunner.class)
    public static class Test1 extends Base1 {
        @Test
        public void foo() {...}
    }

    @RunWith(MockitoJUnitRunner.class)
    public static class Test2 extends Base1 {
        @Test
        public void bar() {...}
    }
}

abstract class Base1 {
    @Before
    public void setUpBase()  {...}
}

但我看到错误:

java.lang.Exception: Class Base1 should be public
    at org.junit.runners.model.FrameworkMethod.validatePublicVoid(FrameworkMethod.java:91)
    at org.junit.runners.model.FrameworkMethod.validatePublicVoidNoArg(FrameworkMethod.java:70)
    at org.junit.runners.ParentRunner.validatePublicVoidNoArgMethods(ParentRunner.java:133)
    at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:165)
    at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:104)
    at org.junit.runners.ParentRunner.validate(ParentRunner.java:355)
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:76)
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:57)
    at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl$1.<init>(JUnit45AndHigherRunnerImpl.java:23)

1.请说明问题原因
2.请告诉我避免以下错误的优雅方法。

我想将逻辑封装在一个文件中。

最佳答案

我最近遇到了同样的问题,我通过将类(class)改为公共(public)类(class)解决了这个问题。您可能需要检查您的 Class Base1 是否确实是一个公共(public)类。

关于java - 模拟 java.lang.Exception : Class should be public when I use inner classes in tests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28475003/

相关文章:

java - 如何通过按钮更改后对齐 imageView

java - Eclipse、Java、导入突然不再被识别

java - Eclipse 代码重构 - Junits

python - 如何测试比较的用法?

java - 单元测试方法参数验证最佳实践

java - 如何使用 PowerMockito 从最终静态类返回模拟对象

java - 何时对具有静态数据的类进行垃圾回收

c# - 为什么我必须使用 IoC unity

unit-testing - 模拟代码减少代码覆盖率

java - 检查是否未使用 Mockito 调用方法