渡辺修司さん著の「JUnit実践入門」を読んで、自分なりに考えたテストコードを書きます。
第二段
第20章 テストダブルの活用 20.3 外部システムに依存するテスト
本では、mockitoを利用していましたが、私は、ExternalResourceを使って、getInputメソッドで、ファイルのInputStreamを返す方法をとりました。
テストコード
package ch20.ex03; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import java.io.InputStream; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExternalResource; public class NeworkResourcesTest { @Rule public NetworkLoaderResource resource = new NetworkLoaderResource(); @Test public void NetworkResourcesのloadはHello_Worldを返す() throws Exception { NetworkResources sut = new NetworkResources(); sut.loader = new NetworkLoader() { @Override public InputStream getInput() { return new NetworkLoaderResource().getInput(); } }; assertThat(sut.load(), is("Hello World")); } class NetworkLoaderResource extends ExternalResource { NetworkLoader loader; @Override protected void before() throws Throwable { loader = new NetworkLoader(); } public InputStream getInput() { InputStream in = getClass().getResourceAsStream("input.txt"); return in; } } }
]
ここで、input.txtファイルは、内容が
Hello World
で、Eclipseのプロジェクトでは src/test/resources/ch20/ex03に配置されます。