C# 微软摩尔,动态仪器
摩尔有两种使用方法: 人工C# 微软摩尔,动态仪器,c#,.net,moles,C#,.net,Moles,摩尔有两种使用方法: 人工 包括[组件:MoledType(类型(_-type-to-_仪器))] 指定[主机类型(“摩尔”)] 调用Microsoft.Moles.Framework.Moles.MoleRuntime.SetMole(委托存根、对象接收器、方法信息方法) 动态地 添加一个{project name}.moles文件:为mole指定程序集。例如 构建并包含对molesasemblies/{project_name}.Moles.dll的引用 使用M{class_name}自
MoledAssembly
*.Moles
文件时自动生成的dll。引用第四个dll(请参见#4)Sealed
。声明[组件:MoledAssembly(“密封”)]
。请注意,我正在尝试在没有此dll的情况下完成手动摩尔注入-它只是一个概念参考,或用于我们的讨论或故障排除Moles.dll
在回答/评论/问题中-让我们根据此列表参考每个零件。当使用非自动生成的moled装配时,装配属性是必需的。Moles工具for visualstudio会在必要时自动提醒编译器存在生成的程序集 通过VisualStudio添加Moles部件时,在生成项目之前不会生成mole部件。此外,不可能为不存在的程序集包含程序集属性。这样做将导致编译器失败。因此,Moles还需要向编译器命令行动态添加命令,以生成moled程序集,然后从项目中正确引用它们 使用手动生成的Moles部件时,必须包含部件属性,因为Moles工具不知道它的存在,因为部件不是自动生成的。程序员必须为鼹鼠做这项工作 如果您想走到这一步,可以在编译器启动之前使用代码生成。PERL可以在需要时轻松地注入必要的汇编属性。当编译器收到代码时,它将已经注入属性 支持我答案的实验: 我可以复制你的问题。通过在using语句块下面添加assembly属性,我也能够解决这个问题。我采取了以下步骤来构建示例应用程序:
using ClassLibrary1;
using Microsoft.Moles.Framework;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MoleClassLibrary;
[assembly: MoledAssembly(typeof(ClassLibrary1.Class1))]
namespace TestProject1
{
[TestClass()]
public class Class1Test
{
[TestMethod()]
[HostType("Moles")]
public void TestStringTest()
{
var target = new Class1();
var expected = "Mole value.";
string actual;
MClass1.AllInstances.TestString = value => expected;
actual = target.TestString();
Assert.AreEqual(expected, actual);
}
}
}