java.lang.AssertionError: ожидается: <ON>, но было: <com.spacestudy.model.Account@783f5f71> - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь написать тестовый пример JUnit для следующего метода поискового фильтра. Я использую Querydsl для фильтра поиска. Следующий метод не зависит от репозитория; Вот почему я не использую мокито. Это первый раз, когда я пишу тестовый пример для такого метода. Пожалуйста, дайте какие-либо предложения, если у вас есть какие-либо?

public List<Tuple> btnSearchClick(String sClientAcctId, String sAcctDesc, String sInvestigatorName,
            String sClientDeptId) throws Exception {

        QAccount account = QAccount.account;
        QDepartment department = QDepartment.department;
        QAccountCPCMapping accountCPCMapping = QAccountCPCMapping.accountCPCMapping;
        QInvestigator investigator = QInvestigator.investigator;

        JPAQuery<Tuple> query = new JPAQuery<Tuple>(em);
        query.select(Projections.bean(Account.class, account.sClientAcctId, account.sAcctDesc, account.sLocation,
                Projections.bean(Department.class, department.sDeptName, department.sClientDeptId).as("department"),
                Projections.bean(Investigator.class, investigator.sInvestigatorName).as("investigator"),
                Projections.bean(AccountCPCMapping.class, accountCPCMapping.sCCPCode).as("accountCPC"))).from(account)
                .innerJoin(account.department, department).innerJoin(account.accountCPC, accountCPCMapping)
                .innerJoin(account.investigator, investigator).where(account.nInstId.eq(60));

Контрольный пример

@Test
public void btnSearchClick() throws Exception {

List<Tuple> account= accountService.btnSearchClick("1124100", sAcctDesc, sInvestigatorName, sClientDeptId);


Department dep = new Department();
dep.setsDeptName("Deans Office");
dep.setsClientDeptId("120010");

Investigator invest = new Investigator();
invest.setsInvestigatorName("Ram, Sri");

AccountCPCMapping cpc = new  AccountCPCMapping();
cpc.setsCCPCode("RT");


Account acc = new Account();
acc.setsLocation("ON");
acc.setsAcctDesc("SRIRAM");
acc.setsClientAcctId("1124100");

acc.setInvestigator(invest);
acc.setDepartment(dep);
acc.setAccountCPC(cpc); 

accountRepo.save(acc);

assertEquals(acc.getsLocation(), account.get(0));
}

Account.java

@Entity
@Table(name = "account")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Account implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "account_seq_generator")
    @SequenceGenerator(name = "account_seq_generator", sequenceName = "account_seq")

    @Column(name = "naccount_id")
    public Integer nAccountId;

    @Column(name = "namount")
    public String nAmount;

    @Column(name = "sacct_desc")
    public String sAcctDesc;

    @Column(name = "naccount_cpc_mapping_id")
    public Integer nAccountCPCMappingId;

    @Column(name = "nindirect_cost_rate")
    public Integer nIndiretCostRate;

    @Column(name = "nagency_id")
    public Integer nAgencyId;

    @Column(name = "ndept_id")
    public Integer nDeptId;

    @Column(name = "sgrant_num")
    public String sGrantNum;

    @Column(name = "dstart_date")
    public Timestamp dStartDate;

    @Column(name = "dend_date")
    public Timestamp dEndDate;

    @Column(name = "slocation")
    public String sLocation;

    @Column(name = "sclient_acct_id")
    public String sClientAcctId;

    @Column(name = "ninvestigator_id")
    public Integer nInvestigatorId;

    @Column(name = "ninst_id")
    public Integer nInstId;

    @Column(name = "ntemp_account_id")
    public Integer nTempAccountId;

    @ManyToOne(optional = true, cascade = { CascadeType.MERGE })
    @JoinColumn(name = "ndept_id", insertable = false, updatable = false)
    public Department department;

    @ManyToOne(optional = true, cascade = { CascadeType.ALL })
    @JoinColumn(name = "ninvestigator_id", insertable = false, updatable = false)
    public Investigator investigator;

    @ManyToOne(optional = true, cascade = { CascadeType.ALL })
    @JoinColumn(name = "naccount_cpc_mapping_id", insertable = false, updatable = false)
    public AccountCPCMapping accountCPC;

    // Getter and Setter

Трассировка стека

java.lang.AssertionError: expected:<ON> but was:<com.spacestudy.model.Account@783f5f71>
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)
at com.spacestudy.service.TestAccountService.btnSearchClick(TestAccountService.java:120)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)

Вывод почтальона

[
    {
        "sAcctDesc": "SRIRAM",
        "sLocation": "ON",
        "sClientAcctId": "1124100",
        "department": {
            "sDeptName": "Deans Office",
            "sClientDeptId": "120010"
        },
        "investigator": {
            "sInvestigatorName": "Ram, Sri"
        },
        "accountCPC": {
            "sCCPCode": "RT"
        }
    }
]

Может кто-нибудь сказать мне, что я делаю неправильно в моем тестовом примере, или предложить альтернативу коду выше.

1 Ответ

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

Списки с нулевой индексацией. Это означает, что если в вашем списке только 1 элемент, его индекс будет 0, а не 1. Элемент с индексом 1 фактически является вторым (который не существует, следовательно, индекс выходит за границы).

account.get(1)

должно быть

account.get(0);
...