【问题标题】:Using Microsoft Fakes with factory instance methods使用带有工厂实例方法的 Microsoft Fakes
【发布时间】:2012-10-09 12:32:58
【问题描述】:

我有一个看起来像这样的类:

public class MyClass
{
    int myNum;

    private MyClass() {}

    public static MyClass CreateInstance()
    {
        MyClass a = new MyClass();
        a.myNum=5;
        return a;
    }

    public bool IsBigger(MyClass b)
    {
        return this.myNum > b.myNum;
    }

}

然后,我想对其进行填充并想使用 IsBigger 方法,但默认情况下它返回 false。在这种情况下如何调用基本方法?

测试如下:

[TestMethod]
Public void test()
{
 ShimMyClass firstShim = new ShimMyClass();
 firstShim.myNumGet = () => { return 6; }

 ShimMyClass secondShim = new ShimMyClass();
 secondShim.myNumGet = () => { return 7; }

 Assert.IsTrue(secondShim.Instance.IsBiggerThan(firstShim.Instance);
}

【问题讨论】:

  • 显示如何调用 IsBigger 方法。你对基本方法是什么意思?我认为没有基本方法......
  • 我比使用单元测试创​​建一个 shim 实例并将 myNum 设置为其他数字。比我调用 firstShimMyClass.Instance.IsBiggerThan(otherShimClass),但即使我没有实现它也会返回下降

标签: c# testing factory shim microsoft-fakes


【解决方案1】:

将 MyNum 设为属性:

public class MyClass
{
    public int MyNum { get; private set; }

    private MyClass() {}

    public static MyClass CreateInstance()
    {
        MyClass a = new MyClass();
        a.MyNum=5;
        return a;
    }

    public bool IsBigger(MyClass b)
    {
        return this.MyNum > b.MyNum;
    }

}

在使用 ShimMyClass 之前创建 Shim 上下文:

using (ShimsContext.Create())
{ 
    ShimMyClass firstShim = new ShimMyClass();
     firstShim.MyNumGet = () => { return 6; }

     ShimMyClass secondShim = new ShimMyClass();
     secondShim.MyNumGet = () => { return 7; }

     Assert.IsTrue(secondShim.IsBiggerThan(firstShim);
}

Microsoft Fakes on MSDN

【讨论】:

  • 从外面。可以说我可以改变它。它只是一个示例类。
  • 你试过调试吗?因为我在您的示例课程中没有看到问题!你如何从外面设置它?在示例中它是私有的
  • 我没有尝试过,但我认为您可以删除“实例”属性访问。也许它会工作?
  • 你调试的结果是什么?有什么例外吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
相关资源
最近更新 更多