在我的类中,在测试businessflow
下,我有一些私有服务字段和一个javastring
类型的私有字段。
@RunWith(MockitoJUnitRunner.class)
public class BusinessFlowTest {
// How can I mock or spy this?
private String code = "codeValue";
@Mock
private Service1Api service1;
@Mock
private Service2Api service2;
@InjectMocks
private BusinessFlow flow;
...
}
@injectmocks
和@mock
注释极大地创建了模拟和注入服务字段。但是,如何为code
字段创建模拟,因为Mockito不允许为final
类创建模拟?
我看到的一个选择是使用charsequence
接口而不是string
字段类型,但这需要更改businessflow
类的代码,我不喜欢这种想法。
更新:类businessflow
定义如下
@Service
public class BusinessFlow {
@Autowired
@Qualifier(value = "clientCode")
private String code;
@Autowired
private Service1Api service1;
@Autowired
private Service2Api service2;
...
}
由于某些原因,我们没有使用Spring集成测试功能,也不想在不同类型的注入(例如ctor注入)中返工businessflow
模拟是用来模拟外部依赖关系的,这些依赖关系要么太过禁忌,无法在测试上下文中旋转,要么没有必要这样做。您可以模拟服务和DAO层访问点这样的东西,以确保您所做的只是一个单元测试。
您想要做的是为您运行的每个测试更改该字段的值,而不依赖于您的模拟。记住-那些模拟是外部依赖项。你可以很容易地控制*进入你的类的字符串。
有关测试中的示例:
@Test
public void testWithFoo() {
// given
flow.setValue("foo");
// when
// invoke a pertinent method
// then
// observe results
}
*:如果做不到,这是重构的好机会。
当使用@InjectMocks时,它会自动尝试按照以下顺序进行注入:构造器、设置器、字段。它通过检查类型来检查是否可以在这些地方中注入,然后在有多种类型的可能性时命名。这对我来说不太好用,因为我的模拟映射锁实际上是通过它的setter注入到dontMockMe中的。我无法编辑此抽象类。有什么办法让我绕过塞特注射吗?提前谢谢!
我是Spring Security的新手。我看过很多关于如何通过外部属性文件的注释注入值的文章。我尝试了很多方法,但最终都是用java。lang.IllegalArgumentException:无法解析占位符“val.id”异常。 你能给我一些提示如何处理这个例外吗? 我的java类如下所示: 我的属性文件名为val.properties,位于WEB-INF下,其内容为val.id=xyz 我将
问题 你想导入一个模块,但是模块的名字在字符串里。你想对字符串调用导入命令。 解决方案 使用importlib.import_module()函数来手动导入名字为字符串给出的一个模块或者包的一部分。举个例子: >>> import importlib >>> math = importlib.import_module('math') >>> math.sin(2) 0.9092974268256
我对摩基托并不陌生,但这次我在工作中发现了一个有趣的案例。我希望你能帮我解决这件事。 我需要注入mock来改变测试过程中的某些方法行为。问题是,bean结构是嵌套的,并且这个bean在其他bean内部,不能从test方法访问。我的代码如下所示: 所以在我的测试中,我希望调用nestedDAO.method返回模拟答案。 我尝试执行一个initmocks: 还要在我的测试类上添加注释: 总是从方法获
这是我的代码: 如何根据爱好对学生进行分组。我尝试了以下代码: 它没有给出正确的答案。
我知道如何计算出字符串中某个字符或数字的索引,但是有没有任何预定义的方法可以用来给我第n个位置的字符?所以在字符串“foo”中,如果我要求索引为0的字符,它会返回“f”。 注意——在上面的问题中,我所说的“字符”不是指字符数据类型,而是字符串中的字母或数字。这里重要的一点是,调用该方法时,我不会收到char,而是一个字符串(长度为1)。我知道substring()方法,但我想知道是否有更简洁的方法