Исключение инициализации типа при использовании родинок с HtmlAgilityPack

#html-agility-pack #moles #typeinitializeexception

#html-agility-pack #moles #исключение typeinitializeexception

Вопрос:

Я пытаюсь использовать Moles для тестирования нестатического метода в отдельной сборке. При запуске теста без тега [HostType(«Moles»)] тест выполняется нормально. Когда я заменяю его, я получаю следующую ошибку:

«Инициализатор типа для ‘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();
        }
    }
}
  

Комментарии:

1. Не могли бы вы добавить полную трассировку стека генерируемого исключения, а не только первую строку?

Ответ №1:

Я не уверен, что понимаю ваш пример, потому что на самом деле вы не используете Moles.

Если вы просто хотите «внедрить» наш собственный невиртуальный метод, в ссылках вашего тестового проекта вам просто нужно щелкнуть правой кнопкой мыши на сборке тестируемого проекта и выбрать Добавить сборку Moles. Это создаст HAPAndMoles.Ссылка на родинки.

Затем добавьте соответствующее using, и вы сможете называть свой класс «moled», начиная с M (Class1 => MCLass1). Я показываю вам пример тестирования поведения MClass1:

 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, я щелкаю правой кнопкой мыши непосредственно по ссылкам тестового проекта, и я могу добавить сборку родинок для mscorlib. Затем

 using Microsoft.Moles.Framework;
  

.

Комментарии:

1. Jeco … Спасибо за информацию. Я убрал некоторые вещи из своего примера, чтобы привести его к наименьшей форме. Мой исходный код действительно включал использование кода moled. Прочитав ваш ответ, я заметил, что я забыл создать mole для сборки HtmlAgilityPack.