2011-05-11 6 views
1

Moles를 사용하여 별도의 어셈블리에서 비 정적 메서드를 테스트하려고합니다. [HostType ("Moles")] 태그없이 테스트를 실행하면 테스트가 정상적으로 실행됩니다. 교체 할 때 다음 오류가 발생합니다.HtmlAgilityPack에 Moles를 사용할 때 TypeInitializationException이 발생했습니다.

" 'HtmlAgilityPack.HtmlNode'의 형식 초기화 프로그램에서 예외가 발생했습니다."

동일한 방식으로 수행되는 코드 샘플이 첨부되어 있습니다.

도움이 될 것입니다.

클래스/메소드는 단위 테스트에 의해 호출되는

using System; 
using HtmlAgilityPack; 
using System.Web; 

namespace HAPAndMoles 
{ 
    public class Class1 
    { 
     public void fooBar() 
     { 
      HtmlDocument foo = new HtmlDocument(); 
     } 
    } 
} 

단위 테스트 내가 실제로 사용하지 않기 때문에 내가 당신의 예를 이해 확실하지 않다

using System; 
using System.Text; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using HAPAndMoles; 
using Microsoft.Moles.Framework; 
using HtmlAgilityPack; 
using System.Web; 

namespace HAPAndMoles 
{ 
    [TestClass] 
    public class UnitTest1 
    { 
     [TestMethod] 
     [HostType("Moles")] 
     public void TestMethod1() 
     { 
      Class1 bar = new Class1(); 
      bar.fooBar(); 
     } 
    } 
} 
+0

첫 번째 줄뿐만 아니라 발생 된 예외의 전체 스택 추적을 추가 할 수 있습니까? –

답변

0

두더지.

가상 프로젝트가 아닌 "가상"방법을 사용하려는 경우 테스트 프로젝트 참조에서 테스트 된 프로젝트의 어셈블리를 마우스 오른쪽 버튼으로 클릭하고 Moles 어셈블리 추가을 선택하기 만하면됩니다. 그러면 HAPAndMoles.Moles 참조가 만들어집니다.

그런 다음 해당 사용을 추가하면 M (Class1 => MCLass1)으로 시작하는 클래스 "moled"를 호출 할 수 있습니다. 나는 당신에게 MCLASS1 동작을 테스트 예를 보여 나는 mscorlib에의 두더지를하려는 경우

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using HAPAndMoles; 
using HAPAndMoles.Moles; 

namespace HAPAndMoles { 
    [TestClass] 
    public class UnitTest1 
    { 
     [TestMethod] 
     [HostType("Moles")] 
     public void TestMethod1() 
     { 
      bool called = false; 
      var bar = new MClass1() 
      { 
       fooBar =() => called = true 
      }; 
      ((Class1)bar).fooBar(); 
      Assert.IsTrue(called); 
     } 
    } 
} 

, 내가 테스트 프로젝트의 참조에 직접 마우스 오른쪽 버튼으로 클릭하고 나는 mscorlib에에 대한 두더지 조립을 추가 할 수 있습니다. 그런 다음

using Microsoft.Moles.Framework; 

이 필요합니다.

+0

Jeco ... 정보 주셔서 감사합니다. 나는 그것을 가장 작은 형태로 만들기 위해 몇 가지 예를 남겼다. 내 원래 코드에는 조작 된 코드의 사용이 포함되었습니다. 귀하의 답변을 읽은 후, 나는 HtmlAgilityPack 어셈블리에 대한 사마귀를 만드는 것을 게을리했다는 것을 알았습니다. –