J'écris un service Windows relativement petit et simple, et en utilisant des taupes pour simuler des tests unitaires. En raison du petit code, j'ai décidé d'utiliser l'instrumentation Moles, plutôt que de segmenter le code avec des stubs. Lorsque j'exécute un test unitaire contre l'ensemble moled, je reçois une erreur:Moles VS2010 Tests unitaires du service Windows échoue
InitilaizationDetectsMissingMonitorDirectory has failed: Test method FtpDirWatcher.Test.FileWatcherTest.InitilaizationDetectsMissingMonitorDirectory threw exception: Microsoft.Moles.Framework.Moles.MoleInvalidOperationException:
Moles requires tests to be IN an instrumented process.
In Visual Studio Test, add the following attribute your unit test method:
[TestMethod]
[HostType("Moles")] // add this attribute
public void Test() { ... }
Je ne suis pas sûr de ce que cela signifie que « taupes nécessite des tests pour être EN un processus instrumenté. » Notez que "IN" signifie que ce n'est pas l'habitude "Moles nécessite des tests pour être un processus instrumenté." J'ai regardé en arrière la documentation, pour voir si j'ai manqué quelque chose. Il me manque évidemment quelque chose d'important.
L'assembly cible ("FtpDirWatcher") est en effet instrumenté par Moles (attesté par la présence de l'objet MFileWatcher), et j'ai les attributs appropriés en place sur la méthode de test. J'ai même essayé de convertir la propriété cible à une méthode, en vain. Alors que se passe-t-il?
Ceci est un code condensé, donc pas de critique!
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);
}
}
}
Toute aide est appréciée!
MISE À JOUR: Ajout de la sortie de construction suivante. Inclus le paramètre bitness dans le code, ci-dessus, pour montrer qu'il ne devrait pas être un problème.
------ Rebuild All started: Project: Common, Configuration: Debug x86 ------
Common -> C:...\Common\bin\x86\Debug\Common.dll
------ Rebuild All started: Project: FtpDirWatcher, Configuration: Debug x86 ------
FtpDirWatcher -> C:...\FtpDirWatcher\bin\Debug\FtpDirWatcher.exe
------ Rebuild All started: Project: FtpDirWatcher.Test, Configuration: Debug x86 ------
Microsoft Moles v0.94.51023.0 - http://research.microsoft.com/moles - .NET v4.0.30319
Copyright (c) Microsoft Corporation 2007-2010. All rights reserved.
00:00:00.00> moles
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> moles generator 0 errors, 0 warnings
FtpDirWatcher.Test -> C:...\FtpDirWatcher.Test\bin\x86\Debug\FtpDirWatcher.Test.dll ========== Rebuild All: 3 succeeded, 0 failed, 0 skipped ==========
Merci pour le lien, mais j'ai déjà essayé de modifier la clé de registre. :/(Désolé, je ne savais pas que vous n'aviez pas de compte StackOverflow!) –