c# - How to use TDD when your method is designed to perform many tasks -


i'm still trying follow path tdd.

let's have sunsystembroker triggered when file uploaded shared folder. broker designed open file, extract records it, try find associated payments in systems , call workflow!

if want follow tdd develop ibroker.process() method how shall do?

note: broker independent assemblies inheriting ibroker , loaded console app (like plugins).

this console in charge of triggering each broker!

public interface ifiletriggeredbroker : ibroker {     filesystemtrigger trigger { get; }     void process(string file); }  public class sunsystempaymentbroker : ifiletriggeredbroker {     private readonly idbdatasourcefactory _hrdbfactory;     private readonly iexceldatasourcefactory _xlfactory;     private readonly ik2datasourcefactory _k2factory;     private ilog _log;      public void process(string file)     {         (...)         // _xlfactory.create(file) > extract         // _hrdbfactory.create() > find         // compare records         // _k2factory.create > start     } } 

each method tested individually.

thank seb

given each method:

_xlfactory.create(file); _hrdbfactory.create();  // compare records _k2factory.create(); 

is tested individually, there little logic test within process(file).

if use moq, can check calls occur:

// arrange const string file = "file.xlsx"; var xlfactory = new mock<iexceldatasourcefactory>(); var hrbdfactory = new mock<idbdatasourcefactory>(); var k2factory = new mock<ik2datasourcefactory>();  // act var sut = new sunsystempaymentbroker(xlfactory.object, hrdbfactory.object, k2factory.object); // i'm assuming you're using constructor injection sut.processfile(file);  // assert xlfactory.verify(m => m.create(file), times.once); hrbdfactory.verify(m => m.create(), times.once); k2factory.verify(m => m.create(), times.once); 

for brevity, i've done single test, breaking 3 tests single "assert" (the verify calls) more realistic. tdd write each test, before wiring method within process(file).

you may want @ having larger, integration level tests, pass in concrete versions of iexceldatasourcefactory, ik2datasourcefactory, idbdatasourcefactory , exercise system in more depth.

in book growing object-oriented software guided tests, defined acceptance test written before work began, , failing whilst feature added in smaller tdd loops of functionality, work toward overall feature.


Popular posts from this blog

php - How should I create my API for mobile applications (Needs Authentication) -

5 Reasons to Blog Anonymously (and 5 Reasons Not To)

Google AdWords and AdSense - A Dynamic Small Business Marketing Duo