4

私はクラスを持っており、次のことを行う必要があるメソッドFileGeneratorのテストを書いています。generateFile()

1)静的メソッドgetBlockImpl(FileTypeEnum)を呼び出す必要がありますBlockAbstractFactory

blockList2)サブクラスメソッドから変数を設定する必要がありますgetBlocks()

3) Stringパラメーターを渡すcreateFile最終ヘルパークラスから静的メソッドを呼び出す必要がありますFileHelper

BlockController4) blockList内のそれぞれのrunメソッドを呼び出す必要があります

これまでのところ、私はこの空のメソッドを持っています:

public class FileGenerator {
    // private fields with Getters and Setters

    public void generateBlocks() {
    }
}

私はJUnit、Mockitoを使用してオブジェクトをモックし、PowerMockitoを使用して静的クラスと最終クラスをモックしようとしました(Mockitoは実行しません)。

私の問題は次のとおりです。に実装がないにもかかわらず、最初のテスト(getBlockList()からメソッドを呼び出す)が合格しています。Eclipse構文エラーを回避するために、静的メソッドを実装しました(これまでのところnullを返します)。BlockAbstractFactorygenerateBlocks()BlockAbstractFactory

静的メソッドが内部で呼び出されているかどうかをテストするにはどうすればよいfileGerator.generateBlocks()ですか?

これまでの私のテストクラスは次のとおりです。

@RunWith(PowerMockRunner.class)
public class testFileGenerator {
    FileGenerator fileGenerator = new FileGenerator();

    @Test
    public void shouldCallGetBlockList() {
            fileGenerator.setFileType(FileTypeEnum.SPED_FISCAL);

            fileGenerator.generateBlocks();

            PowerMockito.mockStatic(BlockAbstractFactory.class);
            PowerMockito.verifyStatic();
            BlockAbstractFactory.getBlockImpl(fileGenerator.getFileType());
    }
}
4

2 に答える 2

6

私は PowerMock の経験がありませんが、まだ回答が得られていないため、ドキュメントを読んで、少しでもお役に立てないかと考えています。

モックするために準備する必要がある静的メソッドを知るために、PowerMock を準備する必要があることがわかりました。そのようです:

@RunWith(PowerMockRunner.class)
@PrepareForTest(BlockAbstractFactory.class) // <<=== Like that
public class testFileGenerator {
    // rest of you class
}

詳細については、こちらをご覧ください。

それは役に立ちますか?

于 2013-03-15T20:56:39.593 に答える
1

作業例:

@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassStaticA.class, ClassStaticB.class})
public class ClassStaticMethodsTest {

    @Test
    public void testMockStaticMethod() {
        PowerMock.mockStatic(ClassStaticA.class);
        EasyMock.expect(ClassStaticA.getMessageStaticMethod()).andReturn("mocked message");
        PowerMock.replay(ClassStaticA.class);
        assertEquals("mocked message", ClassStaticA.getMessageStaticMethod());
    }
于 2013-04-20T09:52:22.100 に答える