2016-05-31 23 views
0

私は次のJUnitテストを実行していますが、正常に動作しますが、最終的には検証に失敗します。私はPsPortがに送ってくれるPsPortとは違うので、私はそれがだと思う。 これをテストする他の方法はありますか?アサーションエラーの期待値の失敗EasyMock

@Test 
    public void testguardarMensaje() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, InstantiationException{ 

     String datoTest = "1=123456"; 

     Constructor<PsPort> constructor = PsPort.class.getDeclaredConstructor(new Class[] {String.class}); 
     constructor.setAccessible(true); 
     PsPort port = constructor.newInstance("middleware.conf"); 

     PsPort drMock; 

     int hash1 = datoTest.hashCode(); 
     String hashString1 = String.valueOf(hash1); 
     String combinedIdDataHashString1 = datoTest +"="+ hashString1; 

     drMock = strictMock(PsPort.class); 
     byte[] datoByte = port.encriptarDesencriptarMensaje(combinedIdDataHashString1.getBytes(), Cipher.ENCRYPT_MODE); 
     drMock.guardarDato(datoByte); 
     replayAll(); 

     int hash = datoTest.hashCode(); 
     String hashString = String.valueOf(hash); 
     String combinedIdDataHashString = datoTest +"="+ hashString; 

     byte[] datoByte2 = port.encriptarDesencriptarMensaje(combinedIdDataHashString.getBytes(), Cipher.ENCRYPT_MODE); 

     DatagramPacket paquete = new DatagramPacket(datoByte2,datoByte2.length); 
     paquete.getData(); 

     DataReader dr = new DataReader(port, null, 100, "=", "C:/Users/Asier/Desktop/logs/"); 

     dr.guardarMensaje(paquete, port); 
     verifyAll();   
    } 

答えて

0

2つのポートオブジェクトが混乱しています。 mocked drPortを作成する感覚は何ですか?テスト中のクラスに「本当の」ポートオブジェクトを与えているときは?

あなたはモックを作成し、それをテスト対象のコードに渡す(そして、模擬動作を期待した動作に設定する必要があります;後で検証することができます)。テスト中のコードに "本当の"オブジェクトだけを提供しますが、通常は "テスト中のコード"への呼び出しの結果に対して何らかのアサートを行います。

ので、その意味では、それは本当にあなたのコード内の少なくとも1つの問題があることが問題ではありません。

drMock.guardarDato(datoByte); 
replayAll(); 

drMock上のメソッド呼び出しの後にEasyMock.expectLastCall()への呼び出しがあるはずです。しかし、言ったように:嘲笑されたオブジェクトは実際には使用されていないので、それは問題ではありません。なぜなら、そのステートメントを追加した場合、テストは常に失敗するからです。あなたの使用していないモックはあなたが見るためにそれを指定した呼び出しを決して見ることができないからです。

いくつかのガイダンスを提供します。

SomeClassYouNeed mockedThingy = createStrict/Nice(SomeClassYouNeed.class); 
expect(mockedThingy.foo()).andReturn("whatever"); 
mockedThingy.bar(); 
expectLastCall(); 
replay (mockedThingy); 

ClassUnderTest underTest = new ClassUnderTest(mockedThingy); 
underTest.doSomething(); 

verify(mockedThingy) 

意味:これは、あなたが一般的にはテストのような種類を行う方法です

a)は、あなたの「テスト中のクラスは、」その仕事 Bを行う必要があると任意の「オブジェクト」)したい/持っています特定の方法で「コントロール」すること。

を嘲笑する必要がある。すべての期待されるメソッド呼び出しの「仕様」を含む。

次に、テスト対象のコードに嘲笑されたものを提供します。テストしたいメソッドを実行してください...最後に、モックが指定した動作を見たことを確認してください。

関連する問題