Как написать тестовый пример JUnit для метода @Query - PullRequest
0 голосов
/ 03 мая 2018

Я знаю, как написать JUnit контрольный пример для findBySInvestigatorName(String SInvestigatorName) такого метода. Но я хочу знать, как написать контрольный пример для метода @Query. Кто-нибудь может подсказать, пожалуйста, как написать контрольный пример для следующего метода?

@Repository
public interface InvestigatorRepository extends JpaRepository<Investigator, Integer> {

    @Query("select new map(invest.sInvestigatorName as sInvestigatorName)"
            + " from Investigator invest where invest.nInstId=60")
    Set<Investigator> findSinvestigatorName();

}

Я пробовал вот так

@RunWith(SpringRunner.class)
@DataJpaTest
public class TestInvestigatorRepository {

    @Autowired
    public TestEntityManager testEm;

    @Autowired
    InvestigatorRepository investRepo;

    @Test
    public void testFindSinvestigatorName() {

        Investigator invest = new Investigator();
        invest.setsInvestigatorName("abc");
        invest.setnInstId(60);

        Investigator saveInDb = testEm.merge(invest);

       Set<Investigator> getFromDb = investRepo.findSinvestigatorName();

      assertEquals(saveInDb.getsInvestigatorName(), getFromDb);

    }

Сбой теста

java.lang.AssertionError: expected:<abc> but was:<[{sInvestigatorName=abc}]>
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.failNotEquals(Assert.java:834)
    at org.junit.Assert.assertEquals(Assert.java:118)
    at org.junit.Assert.assertEquals(Assert.java:144)

1 Ответ

0 голосов
/ 03 мая 2018

Ваш тест почти в порядке, за исключением того, что вы сравниваете String с Set<Investigator>.

Измените ваше утверждение на

assertEquals(saveInDb.getsInvestigatorName(), getFromDb.iterator().next().getsInvestigatorName());

Примечание. Возможно, вы захотите взглянуть на AssertJ. Это позволяет писать гораздо более приятные утверждения для коллекций

...