1

Moles を使用して、別のアセンブリで非静的メソッドをテストしようとしています。[HostType("Moles")] タグなしでテストを実行すると、テストは正常に実行されます。置き換えると、次のエラーが表示されます。

「'HtmlAgilityPack.HtmlNode' の型初期化子が例外をスローしました。」

同じ方法で実行するコード サンプルを添付しました。

どんな助けでも素晴らしいでしょう!

単体テストによって呼び出されるクラス/メソッド

using System;
using HtmlAgilityPack;
using System.Web;

namespace HAPAndMoles
{
    public class Class1
    {
        public void fooBar()
        {
            HtmlDocument foo = new HtmlDocument();
        }
    }
}

単体テスト

using System;
using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using HAPAndMoles;
using Microsoft.Moles.Framework;
using HtmlAgilityPack;
using System.Web;

namespace HAPAndMoles
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        [HostType("Moles")]
        public void TestMethod1()
        {
            Class1 bar = new Class1();
            bar.fooBar();
        }
    }
}
4

1 に答える 1

0

実際、あなたはほくろを使用していないため、あなたの例を理解しているかどうかはわかりません。

独自の非仮想メソッドを単に "Mole" したい場合は、テスト プロジェクトの参照で、テストされたプロジェクトのアセンブリを右クリックし、Add Moles Assemblyを選択するだけです。これにより、HAPAndMoles.Moles 参照が作成されます。

次に、対応する using を追加すると、M で始まるクラスを「moled」と呼ぶことができます (Class1 => MCLass1)。MClass1 の動作をテストする例を示します。

using Microsoft.VisualStudio.TestTools.UnitTesting;
using HAPAndMoles;
using HAPAndMoles.Moles;

namespace HAPAndMoles {
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        [HostType("Moles")]
        public void TestMethod1()
        {
            bool called = false;
            var bar = new MClass1() 
            {
                fooBar = () => called = true
            };
            ((Class1)bar).fooBar();
            Assert.IsTrue(called);
        }
    }
}

mscorlib の Moles が必要な場合は、テスト プロジェクトの参照を直接右クリックして、mscorlib の Moles アセンブリを追加できます。そうして

using Microsoft.Moles.Framework;

が必要です。

于 2011-05-11T07:07:37.720 に答える