i'm having trouble using moq in unittesting project ninject.
first few lines solution. contains several projects (bussineslogic, dal, infrastructure...). goal unittest logic i'm using in bussinesslogic project. solution basicly windows service, i've put in logic can run standalone. i'm using ninject , specify weather want use productionmodule or testingmodule (windows service uses productionmodule, console app uses testingmodule)
i'm using factory pattern ninject kernel whenever need inside application.
my testingmodule inherits ninjectmodule override load() method , there binding. instance:
bind<istoragemanager>().to<stubstoragemanager>();
i have stubstoragemanager it's empty. contains declaration of methods istoragemanager.
the thing (in laymans terms): create unittest create new kernel specifying testingmodule it's parameter. create mock object (let's mock of istoragemanager) storagemanagermock. method in istoragemanager returns messageobject need mock too, couse bussiness logic doing based on messageobject. somehow set properties message object , call businesslogic method on it, can see if logic works correctly.
i hope didn't complicate much.
please bear me, i'm new mocking , dependency injection, willing learn.
i doubt want using ninject in tests. whole point of using ninject can decouple everything. want try , keep decoupled dependency container if possible. pass in if have to, or pass in factories create required object , have container pass in factory.
i suspect want this:
public void atest(){ //create mock storagemanager var managermock = new mock<istoragemanager>(); //create mock messageobject used business logic var messageobjectmock = new mock<messageobject>(); //have storage manager return mock message when required managermock.setup(x => x.getmessageobject()).returns(messageobjectmock.object); //set message expectations messageobjectmock.setup(x => x.thisvalueexpected).returns(10); messageobjectmock.setup(x => x.thisfunctionshouldbecalled()).verifiable("function not called."); //thing test businesslogicobject blo = new businesslogicobject(managermock.object); blo.dothethingimtesting(); //make sure business logic called expected function, or whatever check need... messageobjectmock.verify(); }
Comments
Post a Comment