@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
注释一样运行它。
我如何注入myInjectedVar
正确没有测试ng期望它是一个测试?
从你的类中删除@Test注释:
class MyTestClass {
@Inject
var myInjectedVar: MyController = _
@Test
def myTest = { ... }
}
参见测试文档了解详细信息:http://testng.org/doc/documentation-main.html#class-level
类级别@Test注释的作用是使该类的所有公共方法成为测试方法,即使它们没有被注释。如果您想添加某些属性,您仍然可以在方法上重复@Test注释。
方法myInjectedVar_=(v: MyController): Unit
和myInjectedVar(): MyController
是scala编译器生成的方法。Scala使用这些方法来访问var。
或者,如果您确实喜欢字段注入,则将其设置为private
或private[this]
。
@Test
class X {
@Inject
private var myInjectedVar: MyController = _
def myTest(): Unit = ???
}
给测试类X一个同伴会很奇怪,但是如果这样做,就有可能引入合成和访问宽度,这也会混淆测试。