Использование родинок с DateTime - PullRequest
4 голосов
/ 11 мая 2011

Я начинаю использовать кроты в модульных тестах и ​​немного борюсь с документацией.

Я хочу кротить DateTime.Now.

Если вы посмотрите на старый способ выполненияэто было добавить ссылку на mscorlib, а затем добавить для нее файл-заглушку (Добавить новый элемент -> Заглушки и родинки для тестирования).

Шаблон «Заглушки и родинки для тестирования» устарел, вместо всехвам нужно сделать, это щелкнуть правой кнопкой мыши ссылку и выбрать «Добавить сборку родинок», что нормально.

VS2010 не позволяет вам добавлять ссылку непосредственно в mscorlib, потому что у нас есть ссылка на «Система»,это нормально, так как я могу видеть DateTime в браузере объектов как часть этого пространства имен.

Если я добавлю сборку родинок для ссылки на систему и перестрою, я все равно не смогу разрешить MDateTime.

Есть предложения?

1 Ответ

15 голосов
/ 11 мая 2011

Для Moles of mscorlib вам нужно щелкнуть правой кнопкой мыши по ссылкам вашего тестового проекта. У вас будет Add Moles Assembly для mscorlib . Затем добавьте using System.Moles; в свой тестовый класс, потому что вы хотите Moles of 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.

...