如何在mockito中创建方法调用的文件夹?

时间:2012-06-24 11:59:23

标签: java testing directory mockito creation

表单文档:

   Comparable c=mock(Comparable.class);
    when(c.compareTo(anyInt())).thenReturn(-1);

我想:

 File tempDir=new File("test");
   Comparable c=mock(Comparable.class);
    when(c.compareTo(anyInt())).thenReturn(tempDir.mkdir());

因此将创建真正的文件夹(我将使用它下一个类的私有方法)。 有可能吗? 感谢。

1 个答案:

答案 0 :(得分:1)

令人难以置信的是,你要完成的是什么。我一点也不确定你为什么要这样做。

正如我在评论中所说,当前示例无法编译的原因是File.mkdir()返回booleanComparable.compareTo(Comparable)返回int。但是,如果您正在模拟返回boolean的方法,则可以进行此编译,如下所示:

public class Foo {
  public static void main(String[] args) {
    File file = new File("/tmp/111");
    Bar bar = mock(Bar.class);
    when(bar.isTrue()).thenReturn(file.mkdir());
  }

  public static interface Bar {
    public boolean isTrue();
  }
}

那就是说,我严重怀疑这会做你想做的事。行when(bar.isTrue()).thenReturn(file.mkdir()); 实际上调用了 file.mkdir()。因此,在创建模拟时将创建您的目录。换句话说,前面的例子可以(并且应该)等效地写成:

public class Foo {
  public static void main(String[] args) {
    File file = new File("/tmp/111");
    Bar bar = mock(Bar.class);
    boolean dirMade = file.mkdir();
    when(bar.isTrue()).thenReturn(dirMade);
  }

  public static interface Bar {
    public boolean isTrue();
  }
}

这样写它可以避免在实际创建目录时产生任何混淆。