You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android JUnit4多参数仪器化测试报错:参数数量不匹配

解决JUnit4多参数参数化测试的参数数量不匹配问题

针对你遇到的java.lang.IllegalArgumentException: Wrong number of arguments; expected 3, got 2错误,核心有两个问题需要修复:

1. 修复构造函数语法错误

你的测试类构造函数中两个参数之间缺少逗号,这会导致Kotlin编译器解析异常,间接引发参数数量匹配错误。修改后的构造函数如下:

@RunWith(Parameterized::class)
class PileAddEditTopbarColorTest(
    private val testedPile: WoodPile, // 补上缺失的逗号
    private val testedColor: Color
) {
    @get:Rule
    val composeTestRule = createComposeRule()

    companion object {
        @JvmStatic
        @Parameterized.Parameters
        fun testCase() = listOf(
            arrayOf(invalid_pile, redColor),
            arrayOf(valid_pile, GciGreen)
        )
    }
}

2. 确保测试类不是内部嵌套类

如果PileAddEditTopbarColorTest是嵌套在其他类中的内部类(使用了inner class关键字,或被误处理为持有外部类引用的嵌套类),它会隐式携带外部类实例作为构造参数,导致构造函数实际需要3个参数(外部类实例 + 两个自定义参数),但你的测试用例只提供了2个,从而触发参数数量不匹配的错误。

解决方法:

  • 如果是嵌套类,去掉inner关键字,让它成为静态嵌套类(Kotlin中普通class声明的嵌套类默认不持有外部类引用):
    // 外部类中的静态嵌套测试类
    class OuterTestClass {
        @RunWith(Parameterized::class)
        class PileAddEditTopbarColorTest( // 无inner关键字
            private val testedPile: WoodPile,
            private val testedColor: Color
        ) {
            // ... 类内容 ...
        }
    }
    
  • 或者直接将测试类改为顶层类(不嵌套在任何类内部)。

额外验证

确保testCase()方法中返回的数组元素类型与构造函数参数类型完全匹配:

  • invalid_pile和valid_pile必须是WoodPile类型
  • redColor和GciGreen必须是Color类型

内容的提问来源于stack exchange,提问作者arist0v

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:05:19