#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.