【发布时间】:2022-01-07 02:07:44
【问题描述】:
我在我的 spring boot 项目中使用了额外的 jar 文件。问题是我要测试的方法之一是使用该 jar 中的方法,该方法返回一个值,但也将一个值设置为发布给它的变量。
String valueThatWillBeReturned;
int returnMessage = method(valueThatWillBeReturned);
我不知道为什么方法是这样写的。我不是那个 jar 的作者,我无法调试它,但它就是这样工作的。它将返回将存储在int returnMessage 中的int,并且还将设置发布到它的valueThatWillBeReturned。
测试它对我来说是个问题。我将int returnMessage 的值设置为:
when(external.method(valueThatWillBeReturned).thenReturn(1);
但是我应该如何设置String valueThatWillBeReturned 的值?
主要问题是我的代码依赖于应该返回的String valueThatWillBeReturned。
编辑后
我使上面的例子更简单,但会给你更多的细节。我正在使用外部库 ImageSDK.jar。它根据操作系统使用 .dll 或 .so 文件。
所以根据文档我应该有int[] pnMatchTemplate2Index = new int[1]; 发布到下面的方法。
int result = libSDK.UFM_Identify(hMatcherContainer[0],
templateForIdentification,
sizeOfTemplateForIdentification,
templatesFromDBForIdentification,
sizeOfEachTemplateFromDB,
numberOfTemplatesForCompare,
5000,
pnMatchTemplate2Index);
方法返回的是int result,它存储了返回状态,但该方法还设置了pnMatchTemplate2Index,其中存储了匹配模板的索引。之后我使用templates.get(pnMatchTemplate2Index[0]) 来获取我需要的信息。
所以最后我的方法依赖于那个参数来返回值,我不知道Junit如何设置它来测试我的方法返回。
【问题讨论】:
-
类似“任何”的东西,或者您在执行测试期间传递的值?
-
如果您需要在方法内部的逻辑中使用此值,则必须将外部方法的调用与其他逻辑分开。因此,它将允许您模拟调用外部方法的方法。
-
我发布any() 或anyString() 都没有关系。
String valueThatWillBeReturned在我的代码中声明为 emty 变量,并在发布到method(valueThatWillBeReturned)时填充数据。问题是我的代码依赖于该返回值。 -
由于
String是不可变的,valueThatWillBeReturned在调用method后将始终具有与以前相同的值。 -
好吧,在我的例子中,jar 本身有一个处理程序,它将数据发送到正在执行工作的 dll 文件,并将值返回给已发布到 id 的变量。
标签: java spring-boot junit mocking mockito