c# - How to write a moq test to setup a method to return a count value -


in controller action, whenever new product added check in database product no not present already. code check looks like

 public actionresult index(productmodel model)     {       var productcount = _productsservice.getall(true).count(x => x.productnumber == model.productnumber);        if (productcount > 0)           modelstate.addmodelerror("productnumber", product present in system!");         // more processing      } 

i m new moq testing , trying write unit test setup getall method return 0. have written not seem work

 var _productsservice = new mock<iproductsservice>(); _productsservice.setup(m => m.getall(true).count()).returns(0); 

any ideas? thanks

this not how use moq -- count not method (it's linq/other 3rd party), don't mock it. need mock getall method, method on mockable dependency. "tell" getall return product model matching parameter, so:

[test] public void index_reportsmodelerror_whenproductalreadyexists() {     const int existingproductnumber = 10;     var _productsservice = new mock<iproductsservice>();     var existingproduct = new product { productnumber = existingproductnumber };     _productsservice.setup(m => m.getall(true)).returns(new [] { existingproduct });      controller.index(new productmodel { productnumber = existingproductnumber });      // assert } 

fixing existing tests simple making sure getall never returns products number same 1 in index parameter:

const int existingproductnumber = 10; const int newproductnumber = 20; var _productsservice = new mock<iproductsservice>(); var existingproduct = new product { productnumber = existingproductnumber }; _productsservice.setup(m => m.getall(true)).returns(new [] { existingproduct });  controller.index(new productmodel { productnumber = newproductnumber });  // assert 

Comments

Popular posts from this blog

Payment information shows nothing in one page checkout page magento -

tcpdump - How to check if server received packet (acknowledged) -