gpt4 book ai didi

java - 单元测试 JSR-330 注入(inject)对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:35 26 4
gpt4 key购买 nike

我以前使用过 Spring DI,我认为的好处之一是我可以在不涉及 Spring 的情况下测试我的 Spring bean 类(为简洁起见省略了导入):

public class Foo {
private String field;

public void setField(String field) { this.field = field; }
public String getField() { return field; }
}

public class TestFoo {
@Test
public void test_field_is_set() {
Foo foo = new Foo();
foo.setField("Bar");
assertEquals("Bar", foo.getField());
}
}

现在我正在试验 JSR-330,这意味着不显式编写 setter。

到目前为止,我一直在使用 Hk2,纯粹是因为一些关于 Jersey 与 Hk2 相关的轶事,并且很难与其他 JSR-330 实现共存。

public class Foo {
@Inject
private String field;
}

我半预料会发生一些神奇的事情,@Inject 注释使 setter 变得可用,但事实并非如此:

Foo foo = new Foo();
foo.setField("Bar"); // method setField(String) is undefined for the type Foo
  • 如何在不调用框架的情况下(方便地)测试这种带注释的类?
  • 如果做不到这一点,我如何以可移植的方式调用框架(即不将我的测试代码与 Hk2、Guice 等紧密耦合)
  • 否则,测试以这种方式注释的类的典型、干净的方法是什么?

最佳答案

最简单的是将字段设为包私有(private)(而不是私有(private)),然后在测试中直接设置它们。 (如果测试在同一个包中,则有效)

public class Foo {
@Inject
String field;
}



Foo foo = new Foo();
foo.field = "bar";

这具有避免反射的优点,因此重构是安全的。

关于java - 单元测试 JSR-330 注入(inject)对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19789649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com