### Question:
MetadataService extends AbstractService { public <T extends Obj> T getObjById(Project project, String id, Class<T> cls) { notNull(project, "project"); notNull(project.getId(), "project.id"); notNull(id, "id"); notNull(cls, "cls"); return getObjByUri(OBJ_TEMPLATE.expand(project.getId(), id).toString(), cls); } MetadataService(final RestTemplate restTemplate, final GoodDataSettings settings); @SuppressWarnings("unchecked") T createObj(Project project, T obj); T getObjByUri(String uri, Class<T> cls); Collection<Obj> getObjsByUris(Project project, Collection<String> uris); @SuppressWarnings("unchecked") T updateObj(T obj); void removeObj(Obj obj); void removeObjByUri(String uri); T getObjById(Project project, String id, Class<T> cls); String getObjUri(Project project, Class<T> cls, Restriction... restrictions); T getObj(Project project, Class<T> cls, Restriction... restrictions); Collection<Entry> find(Project project, Class<T> cls, Restriction... restrictions); Collection<String> findUris(Project project,
                                                             Class<T> cls,
                                                             Restriction... restrictions); @SuppressWarnings("unchecked") Collection<Entry> usedBy(Project project, Obj obj, boolean nearest, Class<? extends Obj>... types); @SuppressWarnings("unchecked") Collection<Entry> usedBy(Project project, String uri, boolean nearest, Class<? extends Obj>... types); @SuppressWarnings("unchecked") Collection<Usage> usedBy(Project project, Collection<String> uris, boolean nearest, Class<? extends Obj>... types); Collection<String> findUris(Project project, Restriction... restrictions); Map<String, String> identifiersToUris(Project project, Collection<String> identifiers); List<AttributeElement> getAttributeElements(Attribute attribute); List<AttributeElement> getAttributeElements(DisplayForm displayForm); static final UriTemplate OBJ_TEMPLATE; }### Answer:
@Test(expectedExceptions = IllegalArgumentException.class) public void testGetObjByIdNullProject() { service.getObjById(null, ID, Obj.class); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testGetObjByIdNullId() { service.getObjById(project, null, Obj.class); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testGetObjByIdNullCls() { service.getObjById(project, ID, null); }
@Test public void testGetObjById() { final Obj resultObj = mock(Obj.class); final String uri = format("/gdc/md/%s/obj/%s", PROJECT_ID, ID); when(restTemplate.getForObject(uri, Obj.class)).thenReturn(resultObj); final Obj result = service.getObjById(project, ID, Obj.class); assertThat(result, is(resultObj)); }