Junit设置局部变量

Posted

技术标签:

【中文标题】Junit设置局部变量【英文标题】:Junit set local variable 【发布时间】: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 的变量。 【参考方案1】:

我找到了解决问题的方法。我将pnMatchTemplate2Index 变量的位置从方法更改为类变量。

Service.class

    private int[] pnMatchTemplate2Index = new int[1];//Receives the index of matched template in the template array;

然后在测试方法中我像 Oliver_t 建议的那样嘲笑它。

ServiceTest.class

    int [] mockResults = 0;
    ReflectionTestUtils.setField(underTest,"pnMatchTemplate2Index", mockResults);

地点:

underTest 是我们正在测试的类

"pnMatcherTemplate2Index" 是我们要在我们正在测试的类中模拟的私有变量

mockResults 是我们要为私有变量设置的值

这样我设法使用pnMatchTemplate2Index 从我的其他方法中获取我想要的索引。

【讨论】:

以上是关于Junit设置局部变量的主要内容,如果未能解决你的问题,请参考以下文章

怎样设置MYSQL局部变量

jmeter的全局变量和局部变量

局部变量设置为零? (目标-C)

动态设置局部变量[重复]

如何将函数中的短局部变量设置为公共

Android Studio-设置快速转换局部变量为成员变量