2

私は比較的小さくて単純なWindowsサービスを作成しており、Molesを使用して単体テストをモックしています。コードが小さいため、コードをスタブでセグメント化するのではなく、Molesインストルメンテーションを使用することにしました。moledアセンブリに対して単体テストを実行すると、エラーが発生します。

InitilaizationDetectsMissingMonitorDirectoryが失敗しました:テストメソッドFtpDirWatcher.Test.FileWatcherTest.InitilaizationDetectsMissingMonitorDirectoryが例外をスローしました:Microsoft.Moles.Framework.Moles.MoleInvalidOperationException:

Molesでは、テストをインストルメント化されたプロセスで行う必要があります。

Visual Studio Testで、単体テストメソッドに次の属性を追加します。

[試験方法]

[HostType( "Moles")]//この属性を追加します

public void Test(){...}

「モールは、計装されたプロセスでテストを行う必要がある」とはどういう意味かわかりません。「IN」は、これが通常の「Molesではテストをインストルメント化されたプロセスにする必要がある」ではないことを意味することに注意してください。私はドキュメントを振り返って、見逃したものがあるかどうかを確認しました。私は明らかにまだ重要な何かを見逃しています。

ターゲットアセンブリ( "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 ------

Common-> 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

Copyright(c)MicrosoftCorporation2007-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スキップ=== =======

4

2 に答える 2

1

これはトータルフェイスパームソリューションです。テストメソッドとクラスの横にあるIDEコードウィンドウに配置されたVisualStudioアドイングリフ(アイコン)用のDevExpressツールを使用してテストを実行していることに気付きました。Molesインストーラーは、Visual Studioテストツールを変更して、Molesホストアダプターのパラメーターとスイッチを含めます。ただし、DevExpressは変更されていません。

2つの解決策が可能です。

  1. VisualStudioテストツールを直接使用してMolesテストを実行するだけです
  2. Molesホストを正しく使用するようにVisualStudioのDevExpressツールを変更します

詳細な概要とサンプルコードは、私のブログThe Curly Braceにあります:http://thecurlybrace.blogspot.com/2011/05/moles-requires-tests-to-be-in.html

于 2011-06-02T23:04:58.617 に答える
1

これを試してください: http ://social.msdn.microsoft.com/Forums/en/pex/thread/176b2fc5-882e-413b-b4d5-10ea6b486e65

x64を使用していますか?

于 2011-05-10T20:22:03.577 に答える