0

私はアプリケーションをプログラミングしていますが、それをテストするにはモックファイルが必要です。以下の私のコード:

@Test
public void testPostMail() throws Exception
{
    Emailer instance = new Emailer();
    instance.setRecipientsFromFile(new File("list.txt"));
}

問題は、hdd のファイルに依存したくないということです (もちろん、適切な内容のファイルを作成し、テスト後に削除することはできますが、EasyMock を使用して実行したいと考えています)。

org.easymock.classextension.EasyMock をインポートして使用しようとしましたが、

1) 「ファイルはインターフェイスではありません」というエラーがまだ表示されます

2) classextension.EasyMock は非推奨なので、EasyMock だけを使用する必要があります

私のEasyMockコードが機能していません:

@Test
public void testSetReceipientsFromFile() throws Exception
{
File file = EasyMock.createMock(File.class);
FileReader in = EasyMock.createMock(FileReader.class);
BufferedReader br = EasyMock.createMock(BufferedReader.class);

EasyMock.expect(new FileReader(file)).andReturn(in);
EasyMock.expect(new BufferedReader(in)).andReturn(br);

EasyMock.expect(br.readLine()).andReturn("test@mail.com");
EasyMock.expect(br.readLine()).andReturn("test2@mail2.com");

EasyMock.replay(file, in, br);

EasyMock.verify(file, in, br);

// ...
}

編集:より好意的な意見を聞いたので、EasyMock から Mockito に変更することを考えています。

4

5 に答える 5

1

Mockito では、次のようにします。

    BufferedReader br = Mockito.mock(BufferedReader.class);

    Mockito.when(br.readLine())
            .thenReturn("test@mail.com")
            .thenReturn("test2@mail2.com");

    // Alternative
    // Mockito.when(br.readLine()).thenReturn("aaa", "bbb");

    Assert.assertEquals("test@mail.com", br.readLine());
    Assert.assertEquals("test2@mail.com", br.readLine());
于 2012-04-18T17:16:01.543 に答える
1

EasyMock と Mockito はどちらも、オブジェクトのモック作成をサポートしていません。したがって、 PowerMockや PowerMockitoなど、それをサポートするライブラリが必要です。

ただし、ここには設計上の欠陥があると思います。Emailerファイルを読むのはの責任ですか?私はそうは思わない。

Emailerファイルから受信者のリストを読み取る新しいクラスにファイルを読み取るためのコードを抽出します。よりテストしやすくEmailerなります。そして、その新しいクラスをテストしたい場合は、( TemporaryFolderruleを使用して) 実際のファイルを作成するのが自然な選択です。なぜなら、ファイルの読み取りはそのクラスの主な役割だからです。

于 2012-04-18T16:31:15.127 に答える
0

使用している EasyMock のバージョン。最新バージョン 3.1 では、拡張機能 EasyMock は非推奨です。代わりに通常の簡単なモックを使用できます。これは、API ドキュメントhttp://www.easymock.org/api/easymockclassextension/3.1/index.htmlで提案されていることです。

于 2012-04-24T18:54:12.960 に答える
0

「あなたのテストを聞いてください」。ラッパーを作成してFileで使用する必要がありますEmailer

于 2012-05-15T09:17:46.647 に答える
0

EasyMock 3.0 (現在のバージョンは 3.2) の時点で、具象クラスをモックできるため、現在このエラーは発生しません。

于 2014-04-02T09:04:22.530 に答える