我正在尝试将scalatest合并到我的java项目中;用scalatests替换所有junit测试。有一次,我想检查guice的注入器是否注入了正确的类型。在java中,我有这样一个测试:
public class InjectorBehaviour {
@Test
public void shouldInjectCorrectTypes() {
Injector injector = Guice.createInjector(new ModuleImpl());
House house = injector.getInstance(House.class);
assertTrue(house.door() instanceof WoodenDoor);
assertTrue(house.window() instanceof BambooWindow);
assertTrue(house.roof() instanceof SlateRoof);
}
}
但我对scalatest也有同样的问题:
class InjectorSpec extends Spec {
describe("An injector") {
it("should inject the correct types") {
val injector = Guice.createInjector(new ModuleImpl)
val house = injector.getInstance(classOf[House])
assert(house.door instanceof WoodenDoor)
assert(house.window instanceof BambooWindow)
assert(house.roof instanceof SlateRoof)
}
}
}
它抱怨说 instanceof
不是的成员 Door
/ Window
/ Roof
. 我不能用吗 instanceof
在斯卡拉那边?
6条答案
按热度按时间gorkyyrv1#
如果您不想像junit那样,并且希望使用scalatest的匹配器,那么可以编写自己的属性匹配器来匹配类型(条类型擦除)。
我发现这条线索非常有用:http://groups.google.com/group/scalatest-users/browse_thread/thread/52b75133a5c70786/1440504527566dea?#1440504527566dea
然后可以编写如下Assert:
而不是
n53p2ov02#
关于isinstanceof[type]和junit advice的最新答案很好,但我想补充一点(对于以非junit相关身份访问此页面的人)。在许多情况下,scala模式匹配将满足您的需要。在这种情况下,我会推荐它,因为它给你免费的排版,减少了出错的空间。
例子:
t9aqgxwy3#
将guillaume的scalatest讨论引用(以及james moore链接到的另一个讨论)合并到两个方法中,并针对scalatest 2.x和scala 2.10进行了更新(使用classtag而不是manifest):
pgx2nnw84#
我使用2.11.8对集合进行Assert。较新的语法如下:
lskq00tm5#
scala不是java。scala没有操作符
instanceof
相反,它有一个名为isInstanceOf[Type]
.你也可能喜欢看一个规模最大的速成班。
fnatzsnv6#
使用scalatest 2.2.x(甚至更早),您可以使用: