c# - Verify that a base protected method is called with Moq 3.1 -


i have class inherits abstract base class. trying verify specified protected method in base class called twice , i'd verify parameters passed specific values (different each call).

i hoping i'd able use protected either expect or verify, seemingly i've missed can done these methods.

is i'm attempting possible moq?

update: example of i'm trying do:

class mybase {     protected void somemethodthatsapainforunittesting(string var1, string var2)     {         //stuf file systems etc that's hard unit test     } }  class classiwanttotest : mybase {     public void iwanttotestthismethod()     {         var var1 = //some logic build var 1         var var2 = //some logic build var 2         somemethodthatsapainforunittesting(var1, var);     } } 

essentially want test way variables var1 , var2 created correctly , passed somemethodthatsapainforunittesting, want mock out protected method, verify called @ least once , parameters passed correctly. if calling method on interface trivial, i'm coming unstuck protected method.

i can't change design it's brown field development , i'm not class calling method.

no it's isn't possible.

tools moq , rhino mocks work magic generating subclasses of types want mock @ run time. generate "verify" , "expect" logic overriding member (in case of virtual members) or implementing (in case of interface) , inserting code inspect or record passed arguments , return pre-canned response.

so can around this? firstly if alter base method virtual allow test method creating test harness so:-

class classiwanttotestharness : classiwanttotest {     public string arg1 { get; set; }     public string arg2 { get; set; }     public int callcount { get; set; }      protected override void somemethodthatsapainforunittesting(var1, var2) {         arg1 = var1;         arg2 = var2;             callcount++;     } }  [test] public void classiwanttotest_doeswhatitssupposedtodo() {     var harness = new classiwanttotestharness();     harness.iwanttotestthismethod();     assert.areequal("whatever", harness.arg1);     assert.areequal("it should be", harness.arg2);     assert.isgreaterthan(0, harness.callcount); } 

if it's not possible alter base class @ due code being horribly brownfield don't want shoes dirty, wrap method in classiwanttotest protected virtual method , perform same trick on instead. moq have support overriding protected virtual members (see miscellaneous section here) - though prefer manual test harnesses in case.


Comments

Popular posts from this blog

ASP.NET/SQL find the element ID and update database -

jquery - appear modal windows bottom -

c++ - Compiling static TagLib 1.6.3 libraries for Windows -