【问题标题】:typemock threw InvalidCast exceptiontypemock 抛出 InvalidCast 异常
【发布时间】:2016-06-29 19:54:11
【问题描述】:

我截断了以下代码,并尝试使用 typemock 对其进行测试,但得到了 InvalidCast 异常。 ISomeClass 只是一个接口,而 SomeClass 实现了该接口。 UseOfSomeClass 是另一个使用 SomeClass 的类,它的构造函数以 SomeClass 作为参数。我需要测试 UseOfSomeClass。如何将 typemock 假对象注入到类构造函数中?

public interface ISomeClass
{
    void DoSomething();
}

public class SomeClass : ISomeClass
{
    public void DoSomething()
    {
        Console.WriteLine("Do something!");
    }
}

public class UseOfSomeClass
{
    public SomeClass SomeClassProperty { get; set; }

    public bool IsChecked { get; set; }

    public UseOfSomeClass(SomeClass someClass)
    {
        SomeClassProperty = someClass;
    }

    public void MyMethod()
    {
        SomeClassProperty.DoSomething();

        IsChecked = true;
    }
}

然后测试:

[TestClass]
public class UseOfSomeClassTest
{
    [TestMethod]
    public void TestMethod1()
    {
        var fakeSomeClass = Isolate.Fake.Instance<ISomeClass>();

        var use = new UseOfSomeClass((SomeClass)fakeSomeClass);

        use.MyMethod();

        Assert.IsTrue(use.IsChecked);
    }
}

谢谢!

【问题讨论】:

  • 你不应该嘲笑SomeClass而不是ISomeClass吗?
  • 是的。如果我模拟 SomeClass,它可以正常工作。但为什么我不应该嘲笑 ISomeClass?或者什么时候应该模拟一个接口,什么时候模拟一个具体的类?
  • 如果类构造函数需要SomeClass,则需要模拟SomeClass。如果它需要ISomeClass,则需要模拟ISomeClass。通常,当您进行依赖注入时,您应该更愿意将UseOfSomeClass 更改为在构造函数中接受ISomeClass 而不是SomeClass。实际上,你不应该将接口命名为类似于类,它应该代表类实现的契约。
  • 这是有道理的。谢谢
  • Yacoub 是对的,你应该模拟 SomeClass 因为它是你的 c'tor 需要的对象,你将模拟它作为未来的实例,如下所示:var fakeSomeClass = Isolate.Fake .NextInstance();

标签: dependency-injection typemock


【解决方案1】:

Typemock Isolator 允许您模拟具体的类,因此无需在测试用例中伪造 ISomeClass。您可以伪造 SomeClass 并将其作为参数发送给 ctor。

[TestMethod, Isolated]
public void TestMethod1()
{
    var fakeSomeClass = Isolate.Fake.Instance<SomeClass>();

    var use = new UseOfSomeClass(fakeSomeClass);

    use.MyMethod();

    Assert.IsTrue(use.IsChecked);
}

【讨论】:

    猜你喜欢
    • 2013-05-24
    • 2011-05-30
    • 1970-01-01
    • 2011-02-25
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多