Использование родинок с датой-временем

#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