Я пишу относительно небольшую и простую службу Windows и использую Moles для проверки юнит-тестов. Из-за небольшого кода я решил использовать инструментарий Moles, а не сегментировать код с заглушками. Когда я выполняю какой-либо модульный тест для смоделированной сборки, я получаю сообщение об ошибке:
InitilaizationDetectsMissingMonitorDirectory
не удалось: метод теста
FtpDirWatcher.Test.FileWatcherTest.InitilaizationDetectsMissingMonitorDirectory
бросил исключение:
Microsoft.Moles.Framework.Moles.MoleInvalidOperationException:
Кроты требуют, чтобы тесты были ВНУТРИ инструментального процесса.
В Visual Studio Test добавьте следующий атрибут вашего метода модульного теста:
[TestMethod]
[HostType ("Moles")] // добавить этот атрибут
публичная недействительность
Test () {...}
Я не уверен, что это означает, что "Моль требует, чтобы тесты были IN инструментальным процессом". Обратите внимание, что «IN» означает, что это не обычное «Кроты требуют, чтобы тесты были инструментальным процессом». Я просмотрел документацию, чтобы узнать, что я пропустил. Очевидно, мне все еще не хватает чего-то важного.
Целевая сборка ("FtpDirWatcher") действительно оснащена Moles (о чем свидетельствует наличие объекта MFileWatcher), и у меня есть надлежащие атрибуты на месте в тестовом методе. Я даже пытался преобразовать целевое свойство в метод, но безрезультатно. Итак, что происходит?
Это сжатый код, так что никакой критики!
using System;
using System.IO;
using System.Linq;
using FtpDirWatcher.Moles;
using Microsoft.Moles.Framework;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[assembly: MolesAssemblySettings(Bitness = MolesBitness.AnyCPU)]
namespace .Test // Test project namespace
{
[TestClass]
public class FileWatcherTest
{
readonly string _invalidDirectory = @"B:\invaliddirectory";
[TestMethod]
[DeploymentItem("FileWatcher.exe")]
[HostType("Moles")]
public void InitilaizationDetectsMissingMonitorDirectory()
{
Assert.IsFalse(Directory.Exists(_invalidDirectory));
// THE FOLLOWING LINE OF CODE THROWS THE ERROR.
// Use moles to detour the MonitorDirectory property's Get
// method to a delegate.
MFileWatcher.AllInstances.MonitorDirectoryGet = watcher =>
new DirectoryInfo(_invalidDirectory);
// Don't use the accessor -- no private fields are accessed.
var target = new FileWatcher();
Assert.IsFalse(target.IsConfigurationOk);
}
}
}
Любая помощь приветствуется!
ОБНОВЛЕНИЕ: Добавлен следующий вывод сборки. Включен параметр битности в код выше, чтобы показать, что это не должно быть проблемой.
------ Перестроить все запущено: Проект: Общий, Конфигурация: Отладка x86 ------
Общее -> C: ... \ Common \ bin \ x86 \ Debug \ Common.dll
------ Перестроить все началось: Проект: FtpDirWatcher, Конфигурация: Отладка x86 ------
FtpDirWatcher -> C: ... \ FtpDirWatcher \ bin \ Debug \ FtpDirWatcher.exe
------ Перестроить все началось: Проект: FtpDirWatcher.Test, Конфигурация: Отладка x86 ------
Microsoft Moles v0.94.51023.0 - http://research.microsoft.com/moles - .NET v4.0.30319
Авторские права (c) Microsoft Corporation 2007-2010. Все права защищены.
00: 00: 00.00> родинок
Moles : info : metadata : ignoring reference C:\...\FtpDirWatcher.Test\MolesAssemblies\FtpDirWatcher.Moles.dll
Moles : info : metadata : incompatible assembly bitness, using reflection only
Moles : info : metadata : loading C:\...\FtpDirWatcher\bin\Debug\FtpDirWatcher.exe (reflection only)
Moles : info : compilation : output assembly name: FtpDirWatcher.Moles
Moles : info : code : found 4 types
Moles : info : code : visibility: exported or assembly(FtpDirWatcher.Moles)
00:00:00.37> code generation
Moles : info : code : generating code at C:\...\FtpDirWatcher.Test\obj\x86\Debug\Moles\befw\m.g.cs
00:00:00.52> stubs generation
Moles : info : code : generated 2 stub types
00:00:00.89> moles generation
Moles : info : code : generated 2 mole types
00:00:01.45> compiling
Moles : info : compilation : Moles assembly: C:\...\FtpDirWatcher.Test\MolesAssemblies\FtpDirWatcher.Moles.dll
00: 00: 02.37> генератор молей 0 ошибок, 0 предупреждений
FtpDirWatcher.Test -> C: ... \ FtpDirWatcher.Test \ bin \ x86 \ Debug \ FtpDirWatcher.Test.dll
========== Перестроить все: 3 успешно, 0 не удалось, 0 пропущено ==========