2016-05-31 70 views
0

我有下一個JUnit測試,它工作正常,但最後在驗證它拋出期望失敗。我認爲這是因爲嘲笑PsPort是我發送給DataReaderPsPort的不同。 有沒有其他的方法來測試它?斷言錯誤期望失敗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

令人困惑的是,您有兩個端口對象。創建一個模擬drPort的意義是什麼;那麼當你給被測試的類提供一個「真實」的端口對象時?您可以創建一個模擬並將其傳遞給您的待測試代碼(然後您必須爲預期的行爲設置模擬;您可以隨後進行驗證);或者你只向被測代碼提供「真實」對象,但是你通常會對調用「被測代碼」的結果做出某種斷言。

所以,在這個意義上,它其實並不重要,有在你的代碼的至少一個問題:

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) 

含義:任何「對象」是

一)你的「測試類」需要做的工作 B)你想/有以某種方式「控制」

需要嘲笑;包括所有預期方法調用的「規範」。

然後你提供嘲諷的東西給你的測試代碼;執行你想測試的方法......最後驗證模擬是否看到了你爲它指定的行爲。