【问题标题】:Moles VS2010 Unit Testing of Windows Service FailsMoles VS2010 Windows 服务单元测试失败
【发布时间】:2011-08-22 16:20:27
【问题描述】:

我正在编写一个相对较小且简单的 Windows 服务,并使用 Moles 来模拟单元测试。由于代码很小,我决定使用 Moles 检测,而不是使用存根分割代码。当我对 moled 程序集执行任何单元测试时,我收到一个错误:

InitilaizationDetectsMissingMonitorDirectory 失败:测试方法 FtpDirWatcher.Test.FileWatcherTest.InitilaizationDetectsMissingMonitorDirectory 抛出异常: Microsoft.Moles.Framework.Moles.MoleInvalidOperationException:

Moles 要求在仪表化过程中进行测试。

在 Visual Studio 测试中,为您的单元测试方法添加以下属性:

[测试方法]

[HostType("Moles")] // 添加这个属性

公共无效 测试() { ... }

我不确定“Moles 要求测试是 IN 一个仪器化的过程”是什么意思。请注意,“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);
        }
    }
}

感谢任何帮助!

更新:添加了以下构建输出。在上面的代码中包含位数设置,以表明它不应该是一个问题。

------ 重建全部启动:项目:Common,配置:Debug x86 ------

Common -> C:...\Common\bin\x86\Debug\Common.dll

------ 重建全部启动:项目:FtpDirWatcher,配置:Debug x86 ------

FtpDirWatcher -> C:...\FtpDirWatcher\bin\Debug\FtpDirWatcher.exe

------ 重建全部开始:项目:FtpDirWatcher.Test,配置:Debug 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跳过==========

【问题讨论】:

    标签: unit-testing testing windows-services instrumentation moles


    【解决方案1】:

    【讨论】:

    • 感谢您的链接,但我已经尝试修改注册表项。 :/(抱歉,我没有意识到您没有 StackOverflow 帐户!)
    【解决方案2】:

    这是一个全面的面部解决方案。我意识到我正在使用 DevExpress Tools for Visual Studio 加载项符号(图标)执行测试,这些符号位于 IDE 代码窗口中,位于测试方法和类旁边。 Moles 安装程序更改了 Visual Studio 测试工具,以包括 Moles 主机适配器的参数和开关。但是,DevExpress 没有被修改。

    有两种可能的解决方案:

    1. 直接使用 Visual Studio 测试工具执行 Moles 测试
    2. 修改 DevExpress Tools for Visual Studio 以正确使用 Moles 主机

    详细的概述和示例代码在我的博客The Curly Brace: http://thecurlybrace.blogspot.com/2011/05/moles-requires-tests-to-be-in.html

    【讨论】:

      猜你喜欢
      • 2011-10-05
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 2021-03-28
      相关资源
      最近更新 更多