2016-07-01 15 views
1

私はJEE EARアプリケーションを構築しています。サービスが使用しているリポジトリのモックを作成するためにEasyMockを使い始めました。しかし、私は結果が正しいとは確信していません。特に私がvoidメソッドをテストしている2つのテスト。EasyMock私はこれを正しくやっていますか?

public class VenueServiceTest extends ServiceTest { 

private VenueService venueService = new VenueServiceImpl(); 
private VenueRepository mockVenueRepository; // interface that the service is using 
private List<Venue> venues; 
private Venue venue1; 
private Venue venue2; 

@Override 
public void setupMock() { 
    venues = MockUtils.getMockedVenues(); 
    venue1 = venues.get(0); 
    venue2 = venues.get(1); 
    mockVenueRepository = createMock(VenueRepository.class); 
    venueService.setRepository(mockVenueRepository); 
} 

@Override 
public void testUpdate() { 
    Venue originalVenue = new Venue(0L, "The Venue"); 
    String originalName = originalVenue.getName(); 

    mockVenueRepository.update(originalVenue); 
    expect(mockVenueRepository.findById(originalVenue.getId())).andReturn(originalVenue); 
    replay(mockVenueRepository); 

    originalVenue.setName("Another Venue"); 
    venueService.updateEntity(originalVenue); 

    Venue newVenue = venueService.getEntity(originalVenue.getId()); 
    String newName = newVenue.getName(); 

    assertFalse("Venue names should not be equal", originalName.equals(newName)); 

    verify(mockVenueRepository); 
} 

@Override 
public void testDelete() { 
    expect(mockVenueRepository.findById(venue1.getId())).andReturn(venue1); 
    mockVenueRepository.remove(venue1); 
    expect(mockVenueRepository.findById(venue1.getId())).andReturn(null); 

    replay(mockVenueRepository); 


    assertNotNull(venueService.getEntity(venue1.getId())); 
    venueService.deleteEntity(venue1); 
    assertNull(venueService.getEntity(venue1.getId())); 
    verify(mockVenueRepository); 
} 

これらの両方のテストに合格します。しかし、私が削除/更新の部分をコメントアウトすると、彼らはまだパスします。

@Override 
public void testUpdate() { 
    Venue originalVenue = new Venue(0L, "The Venue"); 
    String originalName = originalVenue.getName(); 

    // mockVenueRepository.update(originalVenue); 
    expect(mockVenueRepository.findById(originalVenue.getId())).andReturn(originalVenue); 
    replay(mockVenueRepository); 

    originalVenue.setName("Another Venue"); 
    // venueService.updateEntity(originalVenue); 

    Venue newVenue = venueService.getEntity(originalVenue.getId()); 
    String newName = newVenue.getName(); 

    assertFalse("Venue names should not be equal", originalName.equals(newName)); 

    verify(mockVenueRepository); 
} 

@Override 
public void testDelete() { 
    expect(mockVenueRepository.findById(venue1.getId())).andReturn(venue1); 
    // mockVenueRepository.remove(venue1); 
    expect(mockVenueRepository.findById(venue1.getId())).andReturn(null); 

    replay(mockVenueRepository); 


    assertNotNull(venueService.getEntity(venue1.getId())); 
    // venueService.deleteEntity(venue1); 
    assertNull(venueService.getEntity(venue1.getId())); 
    verify(mockVenueRepository); 
} 

私はこの権利を行っていますか?私の推測はノーであり、もしそうなら、どうやってこれを正しくテストするのですか?

ありがとうございました!

+1

だろう、更新をテストし、削除します。初心者として:** createStrictMock **を使ってみてください。厳格なモックは、はるかに厳格です。そのため、使用するのが難しいことがあります(指定した呼び出しの順番を主張する)が、一方で厳密なものは時には正確には必要なものです。 – GhostCat

+0

ご返信ありがとうございます。残念ながら、それは問題を解決しませんでした。 – Johan

答えて

1

更新のために、originalVenueを返すように記録しています。あなたは名前を変更しているので、それは確かに異なっています。すべてのテストでoriginalVenueというインスタンスが1つしかありません。

削除の場合は、venue1と入力してからnullと記録しています。したがって、findByIdを2回呼び出すと、venue1nullが返されます。削除をテストすると、removeメソッドだけが呼び出されていることを確認できます。 getEntityを呼び出すと、削除と無関係のgetEntityがテストされます。

基本的に、私はあなたのコードは少し混乱して

@Override 
public void testUpdate() { 
    Venue originalVenue = new Venue(0L, "The Venue"); 
    String originalName = originalVenue.getName(); 

    mockVenueRepository.update(originalVenue); 
    replay(mockVenueRepository); 

    originalVenue.setName("Another Venue"); 
    venueService.updateEntity(originalVenue); 

    verify(mockVenueRepository); 
} 

@Override 
public void testDelete() { 
    mockVenueRepository.remove(venue1); 
    replay(mockVenueRepository); 

    venueService.deleteEntity(venue1); 

    verify(mockVenueRepository); 
} 
+0

ありがとう!それは今より理にかなっています:) – Johan

関連する問題