2011-11-23 55 views
0

我有一些基於反射的測試。反射測試在給定類型的給定程序集上工作,例如,查看service.dll中的所有基於IService的東西。我這樣做是因爲我需要將引用類型引入到TestCase歸因無法處理的測試中。該代碼基本上看起來像下面這樣:Resharper或nUnit測試計數爲反射測試

public static void TestRunnerforTypeList(Type baseType, Func<Type, string, bool> excluder, Action<Type, string> mockResolver, Dictionary<Type, Dictionary<Type, Mock>> mocks, Action<dynamic, Type> assertor, string methodName) 
    { 
     foreach (var type in GetTypesToTest(baseType)) 
     { 
      if (excluder(type, methodName)) continue; 
      dynamic objectToTest = CreateInstance(type, mocks); 
      mockResolver(type, methodName); 
      assertor(objectToTest, type); 
     } 
    } 

這個調用看起來像下面這樣:

[Test] 
    public void Positive_outcome_for_Get() 
    { 
     GeneralTestRunner.TestRunnerforTypeList(typeof(IService<,,>), 
              _serviceFactoryContext.ExcludeTypeForMethod, 
              _serviceFactoryContext.ResolvePositiveMockSetup, 
              _mocks, 
              (service, type) => Assert.IsNotNull(service.Get(1)), 
              "Get"); 
    } 

很簡單的斷言,但你的想法。這樣我得到TestCase歸屬的好處,但與參考類型,如模擬,正在管道。

但是我有其他地方,我使用TestCase attibution和Resharper拿起這些,並增加測試中的測試數量會議,反感的人不會。

我的問題是有沒有告訴Resharper(或nUnit)這個數字在每次調用上面的assertor動作時都增加了的方法?

預先感謝;)

回答

0

我發現這樣做是ReSharper的6和滴反射方面並使用TestCaseSource屬性的唯一方法。 TestCaseSource將指向一個靜態IEnumerable,爲每個測試產生一個工廠引用類型。請參見下面的文檔:

http://www.nunit.org/index.php?p=testCaseSource&r=2.5

唯一的問題相比,這個問題的實現,如果程序員沒有爲實例創建創建嘲弄,但是類型仍回升,如果它是在反射測試將失敗(相同的組件)。因此,如果一個懶惰的程序員在沒有測試的情況下創建一個基於IService的新類型(如果失敗)