我有一个A类作为
Class A{
private static final String ANON_DIR = "/webapps/worldlingo/data/anonymizer/";
private static final String NO_ANON = "noanonymize";
public String first(String text, String srclang, Map dictTokens) {
Set<String> noAnonymize = new HashSet<String>();
second(noAnonymize,ANON_DIR + NO_ANON, "tmpLang","name");
String value;
if(noAnonymize.contains("test")){
value = word;
}
else {
value = "test";
}
return value;
}
其中ANON_ DIR和NO_。这个类有函数第一和函数第二。第一个函数中有调用第二个函数的调用方法。第二个函数是以静态场为参数的void函数。
第二个函数是文件读取函数,路径如下
private void second (Set<String> hashSet, String path, String lang , String type) {
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(path);
br = new BufferedReader(fr);
String Line;
while ((Line = br.readLine()) != null) {
hashSet.add(Line);
}
} catch (IOException e) {
log.error("Anonymizer: Unable to load file.", e);
} finally {
try {
if (fr != null) {
fr.close();
}
if (br != null) {
br.close();
}
} catch (IOException e) {
log.error("Anonymizer : An error occured while closing a resource.", e);
}
}
}
}
现在我正在尝试首先使用mockito测试函数。我正在尝试更改静态参数并将更改的静态参数作为
public void testfirst() throws Exception {
A anon = new A();
Field ANON_DIR = A.class.getDeclaredField("ANON_DIR");
ANON_DIR.setAccessible(true);
//java relection to change private static final field
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(ANON_DIR, ANON_DIR.getModifiers() & ~Modifier.FINAL);
ANON_DIR.set(null,"test");
Field NO_ANON = A.class.getDeclaredField("NO_ANON");
NO_ANON.setAccessible(true);
Field modifiersField1 = Field.class.getDeclaredField("modifiers");
modifiersField1.setAccessible(true);
modifiersField1.setInt(NO_ANON, NO_ANON.getModifiers() & ~Modifier.FINAL);
NO_ANON.set(null,"/noanonymize");
Method anonymizeNames = anon.getClass().getDeclaredMethod("first", String.class, String.class , Map.class);
String srcLang = "MSFT_EN";
Map mapTokens = new HashMap();
String result = (String) anonymizeNames.invoke(anon,"I am David",srcLang,mapTokens);
}
问题:在这里,我可以使用java反射更改私有的final static字段ANON_DIR和NO_ANON,但更改的字段不会发送到第二个函数。从第一个函数调用的第二个函数采用原始值而不是更改的值。即当第二个函数被调用时ANON_DIR具有“/webapps/world lingo/data/匿名器/”值而不是“test”。
因为我将ANON_DIR的值更改为“test ”,所以我希望将相同的“test”值传递给第二个函数。我怎样才能实现第二种方法的测试呢?
这里的问题是违反了关注点分离原则。
您正在测试(剪切)的代码做得太多,因此您很难找到接缝来替换依赖项。
此外,对单元测试的目的也有误解。你不测试代码,你测试的是公共可观察行为,即任何返回值和依赖关系的通信< sub >(但不一定是公共方法)。
所以我的建议是将方法second()
移动到它自己的新类中。cut获取作为构造函数参数传入的新类的实例。然后,很容易在测试中用新类的模拟来替换真正的依赖关系。
另一方面,你可以通过使用 <罢工> PowerMock ...
我需要制作两个lambda函数,一个用参数调用另一个,被调用的函数将参数打印出来。我很难让它工作:第一个函数: 请告知我应该在被调用函数中输入什么代码才能接收参数“hello Jenny”?非常感谢。
问题内容: 对于测试,我使用jest和react-test-renderer。测试应该很简单,但是我很难找到合适的例子。我试图做这样的事情(通常我将功能保存在单独的文件中): utils.js utils.test.js 片段 const childFunction = jest.fn(); 绝对行不通。调用时,parentFunction的主体仅关心其自身的作用域。但是,如果我导入childFu
我有一个helper类,它包含一个公共静态方法: 一个定制服务类使用上面的ProductHandlerManager: 我想在自定义服务类中使用单元测试方法。我尝试使用mockito模拟测试中的部分,但是mockito不支持静态方法模拟。那么我如何使用mockito来单元测试函数呢? 请不要建议我使用Powermock,因为我读过一些文章,说如果我需要模拟静态方法,这表明设计不好。但是我可以接受关
一个trait中的静态函数可以调用同一trait中的另一个静态函数吗?假设我有以下特点: 那不行。代码不能在这里编译。 此外,没有类型让我使用完全限定的语法,如
问题内容: 我正在寻找一个窍门。我知道如何在JavaScript中调用动态的任意函数,并传递特定的参数,如下所示: 我知道如何使用内部的集合传递可选的,无限制的参数,但是,我不知道如何发送任意数量的参数以动态发送给它;我该如何完成这样的工作,但是要有任意数量的可选参数(不要使用丑陋的– )? 问题答案: 使用函数的apply方法:- 编辑 :在我看来,这将是一个稍微的调整会更有用: 这将在浏览器之
我想对签名为的方法进行单元测试 连接对象使用 并在测试时传递给methodA。 神谕sql。数组有一个构造函数 methodA具有获取ArrayDescriptor的逻辑。它还具有为该构造函数提供第三个参数的逻辑,但它将其作为对象数组提供 我模拟这两组逻辑,并传递一个模拟的ArrayDescriptor对象和一个模拟的对象数组。所有这些模仿都是正确的。 所以我的构造函数调用就像 当作为测试的一部分