当前位置: 首页 > 知识库问答 >
问题:

RobolectricTestRunner,测试类只能有一个构造函数

柳德义
2023-03-14

所以我有这个错误,使用robolectric。

java.lang.IllegalArgumentException: Test class can only have one constructor
    at org.junit.runners.model.TestClass.(TestClass.java:40)
    at org.junit.runners.ParentRunner.(ParentRunner.java:75)
    at org.junit.runners.BlockJUnit4ClassRunner.(BlockJUnit4ClassRunner.java:57)
    at org.robolectric.RobolectricTestRunner$HelperTestRunner.(RobolectricTestRunner.java:626)
    at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:198)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:177)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
@RunWith(RobolectricTestRunner.class)
public class PreferenceTest
{
    @Before
    public void setUp()
    {
        RoboGuice.setBaseApplicationInjector(Robolectric.application, RoboGuice.DEFAULT_STAGE,
                Modules.override(RoboGuice.newDefaultRoboModule(Robolectric.application))
                        .with(new CoreConfigModule()));
    }

    @Test
    public void testSessionTokenPrefs()
    {
        InternalPreferences.setSessionToken("abcd1234");
        assertThat(InternalPreferences.getSessionToken()).isEqualTo("abcd1234");

        InternalPreferences.clearSessionToken();
        assertThat(InternalPreferences.getSessionToken()).isNull();
    }
}

共有1个答案

华子昂
2023-03-14

所以从svn历史来看,在我重命名测试包之后,似乎测试坏了。

我刚刚重新命名了它,但不是以前的名字,它又工作了。我不知道到底是怎么回事,但至少我的测试在运行。

 类似资料:
  • 问题内容: 单元测试对我来说是新手,而我却不明白这个错误。我有2个TestCases子类,它们在独立运行时可以正常运行,但在我的测试套件中却不能。 在测试套件(下面的AllTest类)中,前三个可以正常工作,但是AvailableResouresTest和ModelTest会生成错误。 我怀疑这与以下事实有关:我必须在AllTest中导入这两个类(并且只有它们),而它们都位于同一包中。 我使用Ec

  • 我有一个(相当复杂的)数据类型: 现在我发现自己需要另一个数据类型…有两个构造函数。一个与的相同;另一个只存储一个。我有什么选择? 虽然这会起作用,但它也允许类似这样的东西,这是没有意义的。

  • 我试图理解右值引用。这是我迄今为止编写的代码: 输出只有< code >“hello”,这让我很困惑。 由于 是传递给第二个构造函数的临时对象,因此代码输出就好像只调用第一个构造函数一样。 我猜这要么是编译器优化,要么我错过了关于构造函数和右值的一些细节。

  • 我的问题是关于OOP(C)中的构造函数。当我在一个类中将默认构造函数定义为private,并且在main中将该类的一个对象初始化为default时,就会出现默认构造函数不可访问的错误。这很好。但我也在Public部分中使用默认参数构造函数,当我再次在main中初始化对象时,就会出现对函数重载的不明确调用。所以我的问题是,如果不能从main访问私有构造函数,那么编译器应该调用公共部分中的构造函数,这

  • 问题内容: 这是一段代码,作为示例,其余的只是方法(迷宫类的底部)。所以当实例化时,使用 和 这将打印出网格阵列。这是合法的吗?我认为所有类都需要构造函数,它如何打印出二维网格数组? 迷宫课: 问题答案: 不需要 显式 定义构造函数;但是,所有类都必须具有构造函数,如果不提供任何默认构造函数,则将生成默认的空构造函数: 请参见默认构造函数。

  • 问题内容: 我在一个Activity中有一个IntentService,当我尝试调用该服务时,它将引发此错误,我发现这很奇怪,因为如果我声明了空的构造函数。 错误: AndroidManifest.xml 活动: 问题答案: 你是一个内部阶级。如果要将其保留在内部,请将其更改为static: 您可能需要阅读不同类型的嵌套类。google的第一个链接:http : //docs.oracle.com