2016-03-30 42 views
2

Ünite test vakasında yardıma ihtiyacım var. java.nio.file.Files sınıfının write(Path path, byte[] bytes, OpenOption... options) statik yöntemiyle karşılaştırmak istiyorum. Örneğin, denedim. bu şekilde: Bu yöntemde, yöntem bulunamamıştır. Bu durumda, yöntem bulunamamaktadır.Files.write (...) yöntemini almanın bir yolu var mı?

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

Bu sefer için UnfinishedStubbingException.

Nasıl bu düzeltmek yapabilirim?

+3

kullanmayın Neden:

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

Sadece servis aşağıdaki çağrıları yürütür emin olun Sahte bir 'FileSystem' için gereken şekilde mi? Statik yöntemlerin kullanılması zaten büyük bir koku. –

+1

Seconding Louis - Java'nın yerleşik dosya sistemi araçları, Mockito'nun sınırlamalarını aşmak için PowerMockito gibi araçlar kullanıldığında bile alay etmek için iyi değildir. –

+0

Teşekkürler Louis. Önerdiğin yöntemi kullandım ve bellek içi Dosya Sistemi oluşturmak için [bu] (https://github.com/marschall/memoryfilesystem) kitaplığını kullandım. Benim için daha iyi bir çözüm. –

cevap

0

Ben sadece dosya sistemine yazar bir servis vardı, bu yüzden sadece Mockito kullanmaya karar:

Path path = fileSystem.getPath("a", "b", "c"); 
Files.write(path, bytes); 
İlgili konular