2017-04-21 23 views
0
InetAddress.getLocalHost().getHostName() 

上記のコードをテストするにはどうすればJMockitを利用できますか?Javaでjmockitを使用して静的チェーンメソッドをモックする方法

+0

標準ライブラリをテストすることで何を達成したいですか? – Makoto

+0

ホスト名に基づいて、私はいくつかの属性を設定して何らかのアクションをとっています。上記のコードをどうやって嘲笑しますか? – surya

答えて

1

あなたが与えたチェーン方法は以下と等価です:

InetAddress localHost = InetAddress.getLocalhost(); 
String hostName = localHost.getHostName(); 

したがって、我々は2つのモックにこれを分割する必要があります。

@Test 
public void myTest(@Mocked InetAddress mockedLocalHost) throws Exception { 

    new Expectations() {{ 
     mockedLocalHost.getHostName(); 
     result = "mockedHostName"; 
    }}; 

    // More to the test 
} 

をしかし、どのように我々はmockedLocalHostたちがInetAddress.getLocalhost()を呼び出したときに返されるインスタンスであることを得るのですか:

第2の部分は簡単にだけInetAddressをからかうなどのようなExpectationsブロックにそれを置くことによって行われていますか? partial mockingを使用すると、任意の静的メソッドに使用できます。これは、あなたが計画通りにInetAddress.getLocalHost().getHostName()をからかっに

@Test 
public void myTest(@Mocked InetAddress mockedLocalHost) throws Exception { 

    new Expectations(InetAddress.class) {{ 
     InetAddress.getLocalHost(); 
     result = mockedLocalHost; 

     mockedLocalHost.getHostName(); 
     result = "mockedHostName"; 
    }}; 

    // More to the test 
} 

なります。そのための構文はnew Expecations()のパラメータとして、静的メソッドを含むクラスが含まれ、その後、我々は、他のメソッド呼び出しと同じように、それを嘲笑することです。

関連する問題