#unit-testing #moles #pex-and-moles
#модульное тестирование #родинки #pex-и-родинки
Вопрос:
Я начинаю использовать Moles в модульных тестах и немного затрудняюсь с документацией.
Я хочу использовать DateTime.Now.
Если вы посмотрите вокруг, старый способ сделать это состоял в том, чтобы добавить ссылку на mscorlib, а затем добавить для нее файл stubx (Добавить новый элемент -> Заглушки и родинки для тестирования).
Шаблон «Заглушки и Moles для тестирования» устарел, вместо этого все, что вам нужно сделать, это щелкнуть правой кнопкой мыши ссылку и выбрать «Добавить сборку moles», все в порядке.
VS2010 не позволяет добавлять ссылку непосредственно на mscorlib, потому что у нас есть ссылка на «System», это нормально, поскольку я вижу DateTime в object browser как часть этого пространства имен.
Если я добавлю сборку moles для ссылки на систему и перестрою, я все равно не смогу разрешить MDateTime.
Есть предложения?
Ответ №1:
Для родинок mscorlib вам нужно щелкнуть правой кнопкой мыши непосредственно на ссылках вашего тестового проекта. Вам нужно будет добавить сборку Moles для mscorlib. Затем добавьте using System.Moles;
в свой тестовый класс, потому что вам нужны родинки System.DateTime (на самом деле, вам нужно немного больше).
[TestMethod()]
[HostType("Moles")]
public void DateTimeMolesTest()
{
DateTime date = new System.DateTime(2000, 1, 1, 2, 3, 4, 5);
MDateTime.NowGet = () => date;
Assert.AreEqual(date, DateTime.Now);
}
Если вы запустите этот тест, он завершится неудачей, потому что вам нужно добавить:
using Microsoft.Moles.Framework;
[assembly: MoledType(typeof(System.DateTime))]
Тогда ваш тест будет успешным.
Не забывайте, что родинки нельзя использовать с некоторыми специальными типами mscorlib.
Комментарии:
1. Я попробовал «Добавить сборку Moles для mscorlib», но при сборке она выдала мне тысячи ошибок. Большинство из них — ошибка разрешения типа / пространства имен из-за отсутствия ссылки на сборку. Есть идеи?
2. Это чертовски хороший ответ 1