2010-12-02 16 views
22

जब कक्षा विधानसभा का उपयोग करती है। GETEntryAssembly() यूनिट परीक्षण में चलाती है, विधानसभा.GetEntryAssembly() शून्य है। क्या यूनिट परीक्षण के दौरान विधानसभा को परिभाषित करने के लिए कुछ विकल्प है। GETEntryAssembly()?.NET NUnit test - Assembly.GetEntryAssembly() शून्य

+0

आप एक नकली असेंबली उदाहरण बना सकते हैं और अपने यूनिट परीक्षणों के लिए इसका उपयोग कर सकते हैं। – Bernard

+0

@ बर्नार्ड: मैं इसे कैसे कर सकता हूं? – Simon

+0

विधानसभा वर्ग स्थैतिक विधियों में से एक का उपयोग करें, जैसे GetAssembly() या GetCallingAssembly()। – Bernard

उत्तर

8

आप राइनो मोक्स के साथ ऐसा कुछ कर सकते हैं: असेंबली को एन्सेप्लेट करें। गेटएन्ट्रीएस्परब्स() इंटरफ़ेस IAssemblyLoader के साथ एक कक्षा में कॉल करें और इसे उस कक्षा में इंजेक्ट करें जिसे आप परीक्षण कर रहे हैं। यह परीक्षण नहीं किया है, लेकिन इस की तर्ज पर कुछ:

[Test] public void TestSomething() { 
    // arrange 
    var stubbedAssemblyLoader = MockRepository.GenerateStub<IAssemblyLoader>(); 
    stubbedAssemblyLoader.Stub(x => x.GetEntryAssembly()).Return(Assembly.LoadFrom("assemblyFile")); 

    // act  
    var myClassUnderTest = new MyClassUnderTest(stubbedAssemblyLoader); 
    var result = myClassUnderTest.MethodToTest(); 

    // assert 
    Assert.AreEqual("expected result", result); 
} 

public interface IAssemblyLoader { 
    Assembly GetEntryAssembly(); 
} 
public class AssemblyLoader : IAssemblyLoader { 
    public Assembly GetEntryAssembly() { 
    return Assembly.GetEntryAssembly(); 
    } 
} 
37

SetEntryAssembly लागू (विधानसभा विधानसभा) विधि अपने इकाई परीक्षण परियोजना के लिए

http://frostwave.googlecode.com/svn-history/r75/trunk/F2DUnitTests/Code/AssemblyUtilities.cs

में दी गई।

  /// <summary> 
     /// Use as first line in ad hoc tests (needed by XNA specifically) 
     /// </summary> 
     public static void SetEntryAssembly() 
     { 
      SetEntryAssembly(Assembly.GetCallingAssembly()); 
     } 

     /// <summary> 
     /// Allows setting the Entry Assembly when needed. 
     /// Use AssemblyUtilities.SetEntryAssembly() as first line in XNA ad hoc tests 
     /// </summary> 
     /// <param name="assembly">Assembly to set as entry assembly</param> 
     public static void SetEntryAssembly(Assembly assembly) 
     { 
      AppDomainManager manager = new AppDomainManager(); 
      FieldInfo entryAssemblyfield = manager.GetType().GetField("m_entryAssembly", BindingFlags.Instance | BindingFlags.NonPublic); 
      entryAssemblyfield.SetValue(manager, assembly); 

      AppDomain domain = AppDomain.CurrentDomain; 
      FieldInfo domainManagerField = domain.GetType().GetField("_domainManager", BindingFlags.Instance | BindingFlags.NonPublic); 
      domainManagerField.SetValue(domain, manager); 
     } 
+3

लिंक टूटा हुआ है। – Spivonious

+0

यह सुनिश्चित नहीं करता है कि यह मदद करता है: https://github.com/lyphtec/LyphTEC.Repository.Dapper/blob/master/src/LyphTEC.Repository.Dapper.Tests/AssemblyUtils.cs – JohnZaj