3. BDD testing?!
3
BDD = TDD + (Dan North + “standard agile framework”)
User story: “As a [role] I want [feature] so that [benefit]”
Test scenario:
given [initial context],
when [event occurs],
then [ensure some outcomes]
4. public class SuperTypeForGeneratedTestCase {
private Author createAuthor() throws InstantiationException, IllegalAccessException {
Author author = EasyMock.createNiceMock(AuthorParent.class);
EasyMock.expect(author.getName()).andReturn("Khalil Gebran").anyTimes();
EasyMock.replay(author);
return author;
}
private Book createBook() throws InstantiationException, IllegalAccessException {
Book book = EasyMock.createNiceMock(BookParent.class);
EasyMock.expect(book.getTitle()).andReturn("The Prophet").anyTimes();
Author author = createAuthor();
EasyMock.expect(book.getAuthor()).andReturn(author).anyTimes();
EasyMock.replay(book);
return book;
}
private Library createLibrary() throws InstantiationException, IllegalAccessException {
Library lib = EasyMock.createNiceMock(LibraryParent.class);
EasyMock.expect(lib.getTitle()).andReturn("Test Library").anyTimes();
List<Book> books = new ArrayList<Book>();
Book book = createBook();
books.add(book);
EasyMock.expect(lib.getBooks()).andReturn(books).anyTimes();
EasyMock.replay(lib);
return lib;
}
@Test
public void testSuperTypeMappingForInaccessibleClasses() throws Exception {
MapperFactory factory = MappingUtil.getMapperFactory();
Library lib = createLibrary();
Book book = lib.getBooks().get(0);
LibraryDTO mappedLib = factory.getMapperFacade(Library.class, LibraryDTO.class).map(lib);
Assert.assertNotNull(mappedLib);
Assert.assertEquals(lib.getTitle(),mappedLib.getTitle());
Assert.assertEquals(book.getTitle(),mappedLib.getBooks().get(0).getTitle());
Assert.assertEquals(book.getAuthor().getName(),mappedLib.getBooks().get(0).getAuthor().getName());
}
}
Проблема?
5. public class SuperTypeForGeneratedTestCase {
private Author createAuthor() throws InstantiationException, IllegalAccessException {
Author author = EasyMock.createNiceMock(AuthorParent.class);
EasyMock.expect(author.getName()).andReturn("Khalil Gebran").anyTimes();
EasyMock.replay(author);
return author;
}
private Book createBook() throws InstantiationException, IllegalAccessException {
Book book = EasyMock.createNiceMock(BookParent.class);
EasyMock.expect(book.getTitle()).andReturn("The Prophet").anyTimes();
Author author = createAuthor();
EasyMock.expect(book.getAuthor()).andReturn(author).anyTimes();
EasyMock.replay(book);
return book;
}
private Library createLibrary() throws InstantiationException, IllegalAccessException {
Library lib = EasyMock.createNiceMock(LibraryParent.class);
EasyMock.expect(lib.getTitle()).andReturn("Test Library").anyTimes();
List<Book> books = new ArrayList<Book>();
Book book = createBook();
books.add(book);
EasyMock.expect(lib.getBooks()).andReturn(books).anyTimes();
EasyMock.replay(lib);
return lib;
}
@Test
public void testSuperTypeMappingForInaccessibleClasses() throws Exception {
MapperFactory factory = MappingUtil.getMapperFactory();
Library lib = createLibrary();
Book book = lib.getBooks().get(0);
LibraryDTO mappedLib = factory.getMapperFacade(Library.class, LibraryDTO.class).map(lib);
Assert.assertNotNull(mappedLib);
Assert.assertEquals(lib.getTitle(),mappedLib.getTitle());
Assert.assertEquals(book.getTitle(),mappedLib.getBooks().get(0).getTitle());
Assert.assertEquals(book.getAuthor().getName(),mappedLib.getBooks().get(0).getAuthor().getName());
}
}
class SuperTypeForGeneratedSpec extends Specification {
def "mapping by supper type should work for inaccessible class"() {
given:
def factory = MappingUtil.getMapperFactory()
and:
def lib = Mock(Model.LibraryParent) {
getTitle() >> 'Test Library'
getBooks() >> [Mock(Model.Book) {
getTitle() >> 'The Prophet'
getAuthor() >> Mock(Model.Author) {
getName() >> 'Khalil Gebran'
}
}]
};
when:
def actual = factory.getMapperFacade(Model.Library,Model.LibraryDTO).map(lib)
then:
actual
actual.title == lib.title
actual.books[0].title == lib.books[0].title
actual.books[0].author.name == lib.books[0].author.name
}
}
How can we do better?