@Test
class MyTestClass {
@Inject
var myInjectedVar: MyController = _
@Test
def myTest = { ... }
}
当我使用IntelliJ,javax和TestNG来运行MyTestClass
中的所有测试时,myTest
会按照我的预期运行,但我的输出还显示了一个无法正常运行的其他测试:
org.testng.TestNGException:
Method myInjectedVar_$eq requires 1 parameters but 0 were supplied in the @Test annotation.
不知何故,上面的@Inject
注释似乎正在创建一个名为myInjectedVar_$eq
的方法,然后TestNG希望能够像使用@Test
注释一样运行它。
如果没有TestNG期望它成为测试,我如何正确地注入myInjectedVar
?
答案 0 :(得分:2)
从班级中删除@Test注释:
class MyTestClass {
@Inject
var myInjectedVar: MyController = _
@Test
def myTest = { ... }
}
有关详细信息,请参阅testng文档:http://testng.org/doc/documentation-main.html#class-level
类级@Test注释的作用是使该类的所有公共方法成为测试方法,即使它们没有注释。如果要添加某些属性,仍可以在方法上重复@Test注释。
方法myInjectedVar_=(v: MyController): Unit
和myInjectedVar(): MyController
是scala编译器生成的方法。 Scala使用这些方法来访问var。
答案 1 :(得分:0)
或者,如果您真的更喜欢现场注入,请将其设为private
或private[this]
。
@Test
class X {
@Inject
private var myInjectedVar: MyController = _
def myTest(): Unit = ???
}
将测试类X作为伴侣是很奇怪的,但是如果你这样做,你就冒险引入合成和访问扩展,这也会混淆testng。