0

フォーム ドキュメント:

   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());

そのため、実際のフォルダーが作成されます(クラスの次のプライベートメソッドを使用します)。可能ですか?ありがとう。

4

1 に答える 1

1

あなたが達成しようとしていることは信じられないほど不明確です。そもそもなぜこのようなことをしたいのか、私にはまったくわかりません。

コメントで述べたように、現在の例がコンパイルされない理由File.mkdir()は、 abooleanComparable.compareTo(Comparable)返し、 を返すためintです。booleanただし、次のように a を返すメソッドをモックしている場合は、これをコンパイルできます。

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();
  }
}

このように記述すると、ディレクトリが実際にいつ作成されたかについての混乱を避けることができます。

于 2012-06-24T13:00:18.153 に答える