所以我有一个类需要测试。我们把它叫做ClassToTest。它有两个Dao对象作为字段。
Public class ClassToTest {
@Autowired
MyDao dao;
void methodToTest() {
dao.save(something);
}
}
正如您所看到的,ClassToTest不包含任何构造函数或setter,我正在使用spring自动关联字段。
现在,我有了一个具有classToTest所需的所有依赖项的基本测试类:
public abstract BaseTest {
@Mock
MyDao dao;
}
并且testClass扩展了这个BaseTest类:
public class TestClass extends BaseTest {
@InjectMocks
ClassToTest classToTest = new ClassToTest();
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void test() {
classToTest.methodToTest();
}
}
这将导致保存时出现空指针异常。但是,如果我将设置方法更改为:
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
classToTest.dao = dao;
}
考试通过了。
我的理解是,当一个类没有构造函数或setter时,InjectMocks将通过使用字段注入来注入模拟。为什么这里没有发生这种事?
发现这是我使用的1.8.5版本中的错误:https://code.google.com/p/mockito/issues/detail?id=229.
升级1.10修复了这个问题。
注释InjectMocks为我们提供了存根/填充私有成员和重用测试用例的方法。这是我们填充假成员时发生问题的概念代码。 问题是当我们模拟假的组件B时。然后,someShimmedMethod将返回null。似乎InjectMock无法将
Mockito lib允许用@injectmock注入对象吗?我见过@Spy注释的例子,但当我试图使用它时,总是得到NullPointerException。我知道我总是可以直接使用reflect,但想法是避免这样的代码。
当使用@InjectMocks时,它会自动尝试按照以下顺序进行注入:构造器、设置器、字段。它通过检查类型来检查是否可以在这些地方中注入,然后在有多种类型的可能性时命名。这对我来说不太好用,因为我的模拟映射锁实际上是通过它的setter注入到dontMockMe中的。我无法编辑此抽象类。有什么办法让我绕过塞特注射吗?提前谢谢!
所以我有一个简单的java类: ClassA包含: B类: 我的测试设置如下所示: 问题是ClassB不是为ClassA注入的。 然后通过classA调用returnObject(ClassB),它返回NullPointerException(ClassB不是模拟/注入的)。 如果通过IWantToTestThisClass调用returObject(class B),则可以。 这是同时为两个类注
在引导模式中是否有一个选项可以使它保持模式,即使用户点击离开模式?当用户在对话框外部单击时,模式对话框将隐藏。我希望它保持模态,直到用户单击关闭按钮。
我有一个@sessionscoped bean,一个带有@stateless注释和@inject the bean和@ejb我的EJB的Restful Jersey服务。 当我试图从浏览器的URL调用rest web服务时,服务会注入@inject UserBean。但是当我试图从@SessionScoped UserBean中的代码调用web服务时,它不会被注入。 豆子: 1: Login fr