c# - Async methods return null -


if try mock type containing async method such :

interface foo {     task<int> bar(); } 

then mock's bar method returning null. guess moq choosing default(task<int>) default return value method, indeed null. moq should rather choose task.fromresult(default(int)) default value. can force moq make async methods returning non-null tasks ?

if interested, made extension class makes async methods stubing less verbose :

public static class setupextensions {     public static ireturnsresult<tmock> returnstask<tmock, tresult>(         isetup<tmock, task<tresult>> setup) tmock : class     {         return setup.returns(() => task.fromresult(default(tresult)));     }      public static ireturnsresult<tmock> returnstask<tmock, tresult>(         isetup<tmock, task<tresult>> setup, tresult value) tmock : class     {         return setup.returns(() => task.fromresult(value));     }      public static ireturnsresult<tmock> returnstask<tmock, tresult>(         isetup<tmock, task<tresult>> setup, func<tresult> func) tmock : class     {         return setup.returns(task.factory.startnew(func));     }      public static ireturnsresult<tmock> returnstask<tmock, t, tresult>(         isetup<tmock, task<tresult>> setup, func<t, tresult> func) tmock : class     {         return setup.returns<t>(arg => task.factory.startnew(() => func(arg)));     }      public static ireturnsresult<tmock> returnstask<tmock, t1, t2, tresult>(         isetup<tmock, task<tresult>> setup, func<t1, t2, tresult> func) tmock : class     {         return setup.returns<t1, t2>((arg1, arg2) => task.factory.startnew(() => func(arg1, arg2)));     }      public static ireturnsresult<tmock> returnstask<tmock, t1, t2, t3, tresult>(         isetup<tmock, task<tresult>> setup, func<t1, t2, t3, tresult> func) tmock : class     {         return setup.returns<t1, t2, t3>((arg1, arg2, arg3) => task.factory.startnew(() => func(arg1, arg2, arg3)));     }      public static ireturnsresult<tmock> returnstask<tmock, t1, t2, t3, t4, tresult>(         isetup<tmock, task<tresult>> setup, func<t1, t2, t3, t4, tresult> func) tmock : class     {         return setup.returns<t1, t2, t3, t4>((arg1, arg2, arg3, arg4) => task.factory.startnew(() => func(arg1, arg2, arg3, arg4)));     }      public static ireturnsresult<tmock> returnstask<tmock>(this isetup<tmock, task> setup, action action) tmock : class     {                     return setup.returns(task.factory.startnew(action));     }      public static ireturnsresult<tmock> returnstask<tmock, t>(this isetup<tmock, task> setup, action<t> action) tmock : class     {                     return setup.returns<t>(arg => task.factory.startnew(() => action(arg)));     }      public static ireturnsresult<tmock> returnstask<tmock, t1, t2>(this isetup<tmock, task> setup, action<t1, t2> action) tmock : class     {                     return setup.returns<t1, t2>((arg1, arg2) => task.factory.startnew(() => action(arg1, arg2)));     }      public static ireturnsresult<tmock> returnstask<tmock, t1, t2, t3>(this isetup<tmock, task> setup, action<t1, t2, t3> action) tmock : class     {                     return setup.returns<t1, t2, t3>((arg1, arg2, arg3) => task.factory.startnew(() => action(arg1, arg2, arg3)));     }      public static ireturnsresult<tmock> returnstask<tmock, t1, t2, t3, t4>(this isetup<tmock, task> setup, action<t1, t2, t3, t4> action) tmock : class     {                     return setup.returns<t1, t2, t3, t4>((arg1, arg2, arg3, arg4) => task.factory.startnew(() => action(arg1, arg2, arg3, arg4)));     }      public static ireturnsresult<tmock> returnstask<tmock>(this isetup<tmock, task> setup) tmock : class     {         return setup.returns(task.factory.startnew(delegate {  }));     } } 

some examples :

//example 1 : public interface ifoo {     task bar(); }  var mock = new mock<ifoo>();  mock.setup(m => m.bar()).returnstask(); //await bar() return void  //example 2 : public interface ifoo {     task<int> bar(); }  var mock = new mock<ifoo>();  mock.setup(m => m.bar()).returnstask(); //await bar() return default(int)  //example 3 : public interface ifoo {     task<int> bar(); }  var mock = new mock<ifoo>();  mock.setup(m => m.bar()).returnstask(4); //await bar() return 4;  //example 4 : public interface ifoo {     task<int> bar(int x, int y); }  var mock = new mock<ifoo>();  mock.setup(m => m.bar(it.isany<int>(), it.isany<int>()))                      .returnstask<ifoo, int, int, int>((x,y) => x + y); //await bar(x, y) return x + y; 

Comments

Popular posts from this blog

java - Run spring boot application error: Cannot instantiate interface org.springframework.context.ApplicationListener -

python - pip wont install .WHL files -

Excel VBA "Microsoft Windows Common Controls 6.0 (SP6)" Location Changes -