2016-03-30 42 views
2

私は単体テストケースの助けが必要です。 write(Path path, byte[] bytes, OpenOption... options)java.nio.file.Filesクラスの静的メソッドをモックしたいです。Files.write(...)メソッドをモックする方法はありますか?

私は試しました。このようにして:

PowerMockito.doReturn(path).when(Files.class, "write", path, someString.getBytes()); 

この場合、この方法は見つかりません。

PowerMockito.doReturn(path).when(Files.class, PowerMockito.method(Files.class, "write", Path.class, byte[] 
      .class, OpenOption.class)); 

今回は、私はUnfinishedStubbingExceptionです。

どうすれば修正できますか?

+3

import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.anyVararg; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.springframework.test.util.ReflectionTestUtils; Path mockPath = mock(Path.class); FileSystem mockFileSystem = mock(FileSystem.class); FileSystemProvider mockFileSystemProvider = mock(FileSystemProvider.class); OutputStream mockOutputStream = mock(OutputStream.class); when(mockPath.getFileSystem()).thenReturn(mockFileSystem); when(mockFileSystem.provider()).thenReturn(mockFileSystemProvider); when(mockFileSystemProvider.newOutputStream(any(Path.class), anyVararg())).thenReturn(mockOutputStream); when(mockFileSystem.getPath(anyString(), anyVararg())).thenReturn(mockPath); // using Spring helper, but could use Java reflection ReflectionTestUtils.setField(serviceToTest, "fileSystem", mockFileSystem); 

ちょうどあなたのサービスは以下の呼び出しを実行してください偽の 'FileSystem'は、あなたが想定している方法ですか?静的メソッドをモックすることは、すでに大きな匂いです。 –

+1

Seconding Louis - Javaのビルトインファイルシステムツールは、PowerMockitoのようなツールを使ってMockitoの制限を超えても、嘲笑には適していません。 –

+0

ルイありがとう。あなたが提案した方法を使用し、メモリ内のFileSystemを作成するために[this](https://github.com/marschall/memoryfilesystem)ライブラリを使用しました。私のためのより良い解決策。 –

答えて

0

私は、専用のファイルシステムへの書き込みつのサービスを持っていたので、私は唯一のMockitoを使用することにしました:使用しないのはなぜ

Path path = fileSystem.getPath("a", "b", "c"); 
Files.write(path, bytes); 
関連する問題