- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
据我了解,如果我们使用 spring 构造型,那么我们不需要使用 new 关键字来创建实例。 Spring 为我们管理它并在运行时为我们提供 bean。
为了让 Spring 注入(inject)这些 bean,我们需要在我们希望 Spring 注入(inject)那个 bean 的地方使用 @Autowired
注释。下面我有一个非常简单的类,我在其中使用 @Component
以便 spring 管理它。这个类有一个我自己负责初始化的列表,然后是一个执行一些逻辑的小方法。
@Slf4j
@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
public class Parser {
private List<String> strList = new ArrayList<>();
public void parseStrings(final String[] strs) {
Arrays.stream(strs)
.map(String::toLowerCase)
.filter(str -> str.length() > 8)
.filter(str -> str.endsWith("sam"))
.forEach(sam1 -> { strList.add(sam1); });
}
}
我还编写了一个单元测试来测试它,这就是它。
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.beans.factory.annotation.Autowired;
import static org.junit.jupiter.api.Assertions.*;
@RunWith(MockitoJUnitRunner.class)
class ParserTest {
@Autowired
private Parser parser;
@Test
void parseStrings() {
String str[] = {"abcsamsam", "abcsyjhgfed abdul sam","abcAhgbkgdjhul samad", "abcabjhgdulsamsam", "sa"};
parser.parseStrings(str);
assertTrue(parser.getStrList().size() == 3);
assertTrue(parser.getStrList().get(0).equalsIgnoreCase("abcsamsam"));
}
}
测试失败
java.lang.NullPointerException
当它尝试调用 parseStrings
方法时,这意味着它无法在运行时注入(inject)正确的初始化 bean。
有人可以指导我缺少什么吗?在类上使用 spring 构造型时是否有必要添加构造函数(我在这里使用 lombok 注释)。
最佳答案
我没有看到创建任何模拟,所以你为什么要使用 @RunWith(MockitoJUnitRunner.class)
?
我也看到了建议使用 @SpringBooTest
的答案。此注解加载应用程序的整个上下文,主要用于集成测试,以便集成应用程序的不同层。这也意味着不涉及模拟。你真的需要吗? (我不这么认为,因为你在谈论单元测试)
如果您的解析器没有引用任何其他 Bean(需要被模拟),那么您就处于简单单元测试的情况下。
@RunWith(SpringRunner.class) // you can even removed it
class ParserTest {
private Parser parser;
@Before
public void setUp() {
parser = new Parser();
}
@Test
void parseStrings() {
String str[] = {"abcsamsam", "abcsyjhgfed abdul sam","abcAhgbkgdjhul samad", "abcabjhgdulsamsam", "sa"};
parser.parseStrings(str);
assertTrue(parser.getStrList().size() == 3);
assertTrue(parser.getStrList().get(0).equalsIgnoreCase("abcsamsam"));
}
关于java - Spring boot @Autowired 在单元测试用例中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62847529/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!