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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top