Test unitari di moli VS2010 del servizio Windows non riesce
-
07-11-2019 - |
Domanda
Sto scrivendo un servizio Windows relativamente piccolo e semplice e uso le talpe per deridere i test unitari. A causa del piccolo codice, ho deciso di utilizzare la strumentazione di moli, piuttosto che segmentare il codice con stub. Quando eseguo qualsiasi test unitario contro l'assemblaggio malizzato, ricevo un errore:
InilaizationDetectsMissingMonitorDirectory non è riuscito: Metodo di prova ftpdirwatcher.test.filewatchertest.initilaizationdectsmissingmonitordirectory ha lanciato un'eccezione: Microsoft.moles.framework.moles.moleinvalidoperationException:
Le moli richiedono che i test siano in un processo strumentato.
Nel test di Visual Studio, aggiungi il seguente attributo il metodo del test unitario:
Metodo di prova
HostType ("Malis")] // Aggiungi questo attributo
public void test () {...}
Non sono sicuro di cosa significhi che "le talpe richiedono che i test siano IN un processo strumentato. "Nota" in "significa che questa non è la solita" moli richiede che i test siano un processo strumentato. "Ho guardato indietro alla documentazione, per vedere se c'è qualcosa che mi è mancato. Ovviamente mi manca ancora qualcosa importante.
L'assemblaggio target ("ftpdirwatcher") è effettivamente strumentato dalle talpe (evidenziate dalla presenza dell'oggetto MFileWatcher) e ho gli attributi adeguati sul metodo di prova. Ho anche provato a convertire la proprietà target in un metodo, inutilmente. Allora, cosa sta succedendo?
Questo è un codice condensato, quindi nessuna critica!
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);
}
}
}
Qualsiasi aiuto è apprezzato!
AGGIORNARE: Aggiunto il seguente output di build. Incluso l'impostazione di bitness nel codice, sopra, per dimostrare che non dovrebbe essere un problema.
------ ricostruita tutto avviato: progetto: comune, configurazione: debug x86 ------
Comune -> c: ... comune bin x86 debug comune.dll
------ ricostruzione tutto avviato: Progetto: ftpdirwatcher, configurazione: debug x86 ------
Ftpdirwatcher -> c: ... ftpdirwatcher bin debug ftpdirwatcher.exe
------ ricostruzione tutto avviato: progetto: ftpdirwatcher.test, configurazione: debug x86 ------
Microsoft Moles V0.94.51023.0 - http://research.microsoft.com/moles - .NET V4.0.30319
Copyright (C) Microsoft Corporation 2007-2010. Tutti i diritti riservati.
00: 00: 00.00> Mali
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> Mali generatore 0 Errori, 0 Avvertenze
Ftpdirwatcher.test -> c: ... ftpdirwatcher.test bin x86 debug ftpdirwatcher.test.dll ========== REBUILA ALL: 3 Succeded, 0 non riuscito, 0 Skipped === ========
Nessuna soluzione corretta