我不熟悉匕首。我创建了一个非常简单的单元测试,试图理解我应该如何使用dagger。不幸的是,它失败了。我可能还不了解匕首的一些基本原理。
public class A {
@Inject
public B b;
public B getB() {
return b;
}
}
public class B {
}
@Module(injects = { A.class, B.class })
public class DaggerModule {
@Provides
public A provideA() {
return new A();
}
@Provides
public B provideB() {
return new B();
}
}
而我的测试课失败了
public class DaggerTest extends TestCase {
public void testDagger() {
ObjectGraph theGraph = ObjectGraph.create(new DaggerModule());
A theA = theGraph.get(A.class);
assertNotNull(theA.getB());
}
}
我认为dagger会将B注入A,因为A希望注入B,DaggerModule包含一个@Providers注释方法,该方法创建B。
更新:
我发现当我像这样编写模块类时
@Module(injects = { A.class })
public class DaggerModule {
@Provides
public B provideB() {
return new B();
}
}
将B注入A作品中。然而,我不理解为什么当模块有一个构造a实例的带注释的方法时,它不起作用。在这种情况下,让注入工作的唯一方法是亲自编写注入,如下所示:
@Module(injects = { A.class, B.class })
public class DaggerModule {
@Provides
public A provideA(B b) {
A theA = new A();
theA.b = b;
return theA;
}
@Provides
public B provideB() {
return new B();
}
}
或者在a中创建一个接受B的构造函数,以便编写
@Module(injects = { A.class, B.class })
public class DaggerModule {
@Provides
public A provideA(B b) {
return new A(b);
}
@Provides
public B provideB() {
return new B();
}
}
在A中需要一个接受B的构造函数或设置器,这正是我认为使用Dagger可以避免的开销。
所以我做错了什么,还是我误解了匕首的功能?
我注意到了完全相同的行为,即@Provides生成的实例没有注入其@Inject标记的成员。cf匕首
我和你做的完全一样:use@提供了参数注入以转发给构造函数(没有同样的印象,它有点违背dagger的目的)。一旦我有空余时间,我会试着深入一点,看看这是否是一种正常的行为。
我想学习如何编写JUnit测试,但我完全失败了。 这是我的测试: 问题是这个简单的断言已经失败了。返回的列表是空的。我知道,我对这一切都不熟悉,但是从我的角度来看,失败是如此出乎意料,以至于我没有办法解决这个问题。 以下是全部代码(不太多): 要测试的功能就是这个,我知道它是有效的: 实际上,我只是想学习如何编写这样的测试,但是几天来我一直没有写出来。有相当多的例子和解释,但是不管我做什么尝试,我
Android Studio 1.1 添加了单元测试支持,详细请看 Unit testing support。本章的其余部分描述的是 “instrumentation tests”。利用 Instrumentation 测试框架可以构建独立的测试 APK 并运行在真实设备(或模拟器)中进行测试。
英文原文:http://emberjs.com/guides/testing/unit/ 单元测试用于测试代码的一个小片段,确保其功能正常。与集成测试不同,单元测试被限定在一个范围内,并且不需要Ember应用运行。 全局 vs 模块 过去如果没有作为一个全局变量加载整个Ember应用,要对应用进行测试非常困难。通过使用模块(CommonJS,AMD等)来编写应用,可以只加载被测试的部分,而不用将其
spring.datasource.hikari.schema=demo 错误: 原因:org.springframework.beans.factory.beanCreationException:创建类路径资源[org/springframework/boot/autocconfigure/orm/jpa/hibernatejpaconfiguration.class]中定义的名为“Entit
我试图在我正在编写的脚本中测试错误处理。如果异步函数fetchBar失败,我将模式匹配失败案例,然后返回包含失败结果的成功未来。 然而,当我对这个流进行单元测试时,我在测试失败案例时遇到了麻烦。我在fetchBar上打了一个存根,以返回失败的future,如下所示。 但是我注意到fetchedBar返回的是成功而不是失败。为什么会这样,我如何存根fetchBar函数来创建一个失败的尝试?
从Spring 3.1开始,由于@Enable*注释,我们可以更容易地使用JavaConfig。 所以我做了一个WebConfig来设置WebMvc配置,并尝试对其进行测试。但是,如果我使用WebConfig扩展WebMVCConfigureAdapter或WebMvcConfigurationSupport,单元测试将失败,因为缺少ServletContext。代码和消息如下所示。 网络配置。J