java - Testing controllers using Spring, JUNIT, MockMvc and Hamcrest -


i trying test controller of mine returns me list of objects on method populate dropdown on page.

i trying write junit test using mockmvc , hamcrest test same.

i want compare list of objects , test if fails or not.

i have created static list of objects in test.java , getting list of objects model.attribute method.

to test: if both list of objects equal , don't contain other objects.

my object called option has 3 properties. key, value , selected. have check if keys exists in list or not.

i unable create matcher same. trying create matcher compare list.

so far have done following:

@before public void setup() throws exception {     // build mockmvc following controller     this.mockmvc = mockmvcbuilders.standalonesetup(openaccountcontroller)             .build(); }  @test public void testopenaccount() {     try {         setalllegislations();         this.mockmvc                 .perform(get("/open_account.htm"))                 // method used print out actual httprequest                 // , httpresponse on console.                 .anddo(print())                 // checking if status 200                 .andexpect(status().isok())                 .andexpect(                         model().attributeexists("appformaccountplans",                                 "appformliralegislations",                                 "appformlrsplegislations",                                 "appformrlsplegislations"))                 .andexpect(                         model().attribute("appformaccountplans", hassize(5)))                 .andexpect(                         model().attribute("appformliralegislations",                                 hassize(8)))                 .andexpect(                         model().attribute("appformlrsplegislations",                                 hassize(2)))                 .andexpect(                         model().attribute("appformrlsplegislations",                                 hassize(1)))                 .andexpect(                         model().attribute(                                 "appformliralegislations",                                 haskeyfeaturematcher(getliralegislations(alllegislations))));   private matcher<list<option>> haskeyfeaturematcher(         final list<option> expectedoptions) {     return new featurematcher<list<option>, list<option>>(             equalto(expectedoptions), "options are", "was") {          @override         protected list<option> featurevalueof(list<option> actualoptions) {             boolean flag = false;             if (actualoptions.size() == expectedoptions.size()) {                 (option expectedoption : expectedoptions) {                     (option actualoption : actualoptions) {                         if (expectedoption.getkey().equals(                                 actualoption.getkey())) {                             flag = true;                         } else {                             flag = false;                             break;                         }                     }                 }             }             if (flag)                 return actualoptions;             else                 return null;         }     }; }  private list<option> getliralegislations(list<option> legislation) {      list<option> liralegislations = new arraylist<option>();     iterator<option> iterator = legislation.iterator();     while (iterator.hasnext()) {         option option = iterator.next();         if (lira_legislations.contains(option.getkey())) {             liralegislations.add(option);         }     }     return liralegislations; }  private list<option> alllegislations;  public list<option> getalllegislations() {     return alllegislations; }  public void setalllegislations() {     alllegislations = new arraylist<option>();     (string key : all_legislations) {         option option = new option();         option.setkey(key);         alllegislations.add(option);     } }  private static final set<string> all_legislations = new hashset<string>(         arrays.aslist(accountlegislationenum.ab.tostring(),                 accountlegislationenum.mb.tostring(),                 accountlegislationenum.nb.tostring(),                 accountlegislationenum.nl.tostring(),                 accountlegislationenum.ns.tostring(),                 accountlegislationenum.on.tostring(),                 accountlegislationenum.qc.tostring(),                 accountlegislationenum.sk.tostring(),                 accountlegislationenum.bc.tostring(),                 accountlegislationenum.fe.tostring(),                 accountlegislationenum.nt.tostring(),                 accountlegislationenum.pe.tostring(),                 accountlegislationenum.yt.tostring(),                 accountlegislationenum.nu.tostring(),                 accountlegislationenum.unknown.tostring())); 

this how getting model attribute as:

 attribute = appformliralegislations            value = [com.abc.arch.core.gui.eform.gui.option@199d1739, com.abc.arch.core.gui.eform.gui.option@185fac52, com.abc.arch.core.gui.eform.gui.option@312a47fe, com.abc.arch.core.gui.eform.gui.option@4edc8de9, com.abc.arch.core.gui.eform.gui.option@71e8e471, com.abc.arch.core.gui.eform.gui.option@70edf123, com.abc.arch.core.gui.eform.gui.option@15726ac1, com.abc.arch.core.gui.eform.gui.option@abeafe7] 

thanks in advance.

you can make life easier when correctly implement option object hashcode() , equals() methods using key attribute; can write:

model().attribute("appformliralegislations",getliralegislations(alllegislations))) 

and rely on list1.equals(list2) method work you.

option hashcode , equals implementation:

public class option {      private string key;     private string label;      ...      @override     public int hashcode() {         final int prime = 31;         int result = 1;         result = prime * result + ((key == null) ? 0 : key.hashcode());         return result;     }      @override     public boolean equals(object obj) {         if (this == obj)             return true;         if (obj == null)             return false;         if (getclass() != obj.getclass())             return false;         option other = (option) obj;         if (key == null) {             if (other.key != null)                 return false;         } else if (!key.equals(other.key))             return false;         return true;     } 

}

methods above generated ide. don't know structure of option class, add label property example in addition key property.


Comments

Popular posts from this blog

Rendering JButton to get the JCheckBox behavior in a JTable by using images does not update my table -

javascript - Using jquery append to add option values into a select element not working -

Android soft keyboard reverts to default keyboard on orientation change -