【问题标题】:ActiproSoftware controls breaks Moq unit testsActiproSoftware 控制中断 Moq 单元测试
【发布时间】:2020-10-21 23:39:46
【问题描述】:

Moq 不想在 net core 3.1 上使用 ActiroSoftware

我遇到以下问题:创建具有以下结构的 net core 3.1 项目:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFrameworks>netcoreapp3.1</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Moq" Version="4.14.7" />
    <PackageReference Include="Actiprosoftware.Controls.WPF" Version="20.1.0" />
  </ItemGroup>
  
</Project>

然后在 Program.cs 中尝试编写以下内容:

using Moq;

namespace moqtest
{
    class Program
    {
        static void Main(string[] args)
        {
            var q = It.IsAny<string>();
        }
    }
}

请注意,由于以下错误,这不会编译:

error CS0234: The type or namespace name 'IsAny' does not exist in the namespace 'It' (are you missing an assembly reference?)

此外,隐式指定命名空间将起作用:

var q = Moq.It.IsAny<string>();

我查看了 msbuild 诊断,似乎一切都与 netcoreapp3.1 兼容,但是当你编译它时,它似乎不再识别 It 类了。

请帮忙!

【问题讨论】:

    标签: c# unit-testing .net-core moq


    【解决方案1】:

    打开View &gt; Object Browser,搜索It。您会注意到第一个结果是由ActiproSoftware.BarCode.Wpf.dll 引入的名为It命名空间

    它也恰好是一个空的命名空间,但这无关紧要。如果它确实包含任何内容,您可以将它们称为It.Something。所以现在发生的事情是,即使你做了using MoqIt 对编译器来说仍然是模棱两可的。

    那个愚蠢的空命名空间的存在迫使你用Moq.限定你的调用

    【讨论】:

    • 我知道那些 Actipro 人搞砸了,因为当我输入内容时它确实显示为命名空间。非常感谢!
    猜你喜欢
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 2010-12-10
    • 2012-11-27
    • 2011-05-04
    相关资源
    最近更新 更多