我有一个问题,我有一些代码,如
import java.io.File;
import java.util.ArrayList;
public class nameCompare {
public static void main(String[] args) {
String path1 = "C:/Users/hoflerj/Desktop/test";
String path2 = "C:/Users/hoflerj/Desktop/test2";
File folder1 = new File(path1);
File folder2 = new File(path2);
File[] listOfFiles1 = folder1.listFiles();
File[] listOfFiles2 = folder2.listFiles();
ArrayList<String> fileNames1 = new ArrayList<String>();
ArrayList<String> fileNames2 = new ArrayList<String>();
for (int i = 0; i < listOfFiles1.length; i++)
{
if (listOfFiles1[i].isFile())
{
fileNames1.add(listOfFiles1[i].getName());//wow
}
}
for (int i = 0; i < listOfFiles2.length; i++)
{
if (listOfFiles2[i].isFile())
{
fileNames2.add(listOfFiles2[i].getName());//seriously wow
}
}
for ( int i = 0; i < 1; i++ )
{
if (fileNames1.equals(fileNames2) )
{
System.out.println("Files names are the same");
}
else if (fileNames1 != fileNames2 )
{
System.out.println("Files names are not equal");
}
}
}
}
我正在尝试调用public void a() {
Obj1 one = Obj1();
Obj2 two = Obj2();
one.b();
two.c();
}
方法,我希望执行a()
方法,但我想嘲笑b()
方法。
最好的方法是什么,因为c()
在Obj2 two
内宣布了?
答案 0 :(得分:1)
两个选项:
new Obj2()
电话。相反,您可以将Obj2对象的工厂传递给该类;并使用它。工厂返回模拟对象;你很好。或者你研究依赖注入的其他机制。new
的调用;例如BrowserWindow概述。我个人的两分钱:我建议选择选项1 - 改善设计总是更好;而不是使用大(丑)PowerMock锤来“修复”设计问题。所以,一个简单的例子是:
public class EnclosingClass {
private final Obj2Factory factory;
EnclosingClass(Obj2Factory factory) {
this.factory = factory;
}
void a() {
Ob2 two = factory.make();
}
答案 1 :(得分:0)
这是一个工作示例测试,使用JMockit库(我开发):
@Test
public void exampleTest(@Mocked Obj2 anyObj2) {
new A().a();
// In case we want to check two.c() was called:
new Verifications() {{ anyObj2.c(); }};
}