### Question:
AbstractDao implements CrudDao<T, ID> { public ID getId(Object key) { return mapper.fromKey(key); } protected  AbstractDao(Mapper<T, ID> mapper, Supplier<Object, Object, Object, Object> supplier); R withCommitTransaction(TransFunc<R> transFunc); R withRollbackTransaction(TransFunc<R> transFunc); R withTransaction(TransFunc<R> transFunc, boolean commit); static R withTransaction(TransFunc<R> transFunc, boolean commit, Supplier<Object, Object, Object, Object> supplier); int count(); @Override int count(Object parentKey); void delete(ID id); @Override void delete(Object parentKey, ID id); void delete(Iterable<ID> ids); T get(ID id); @Override T get(Object parentKey, ID id); @Override ID put(Object parentKey, ID id, T entity); ID put(T entity); @Override ID insert(Object parentKey, ID id, T entity); CursorPage<T> queryPage(int requestedPageSize, String cursorString); @Override CursorPage<T> queryPage(Object ancestorKey, int requestedPageSize, String cursorString); Future<T> getAsync(Object parentKey, ID id); Future<ID> putAsync(T entity); ID getId(Object key); Object getKey(ID id); Object getKey(Object parentKey, ID id); String getKind(); void setParentKey(T entity, Object parentKey); static void setPrincipalName(String name);  }### Answer:
@Test public void testFindUniqueByField() throws IOException { createQueryFixtures(); DUser u47 = userDao.findByEmail(null); assertNull(u47); u47 = userDao.findByEmail("user_47@example.com"); assertEquals(Long.valueOf(47), u47.getId()); assertEquals("user_47@example.com", u47.getEmail()); }