如何使用C#Microsoft伪造单元测试中的Shim类获取和设置对象的值?

时间:2016-02-18 15:56:25

标签: unit-testing microsoft-fakes shim

这是我要测试的主要课程。它包含一个私有方法。

Public class MyClass
{

    private bool IsWorkDone(MyItem item, string name)
    {
        using (MyThing thingObj = new MyThing(item.ID))
        {
            using (MyWork workObj = thingObj.Open())
            {
                try
                {
                  return false;
                }
            }
        }
        return true;
    }
}

在我的测试课中,我写了以下方法

public void CheckIsWorkDoneTest()
    {
        using (ShimsContext.Create())
        {

           MyItem myitem = new ShimMyItem () {
                                                        itemGet = () => new ShimMyItem ()
                                                        {
                                                               IDGet = () => new Guid();                                                                  
                                                         }
                                                      };

ShimMyClass.AllInstances.isWorkDoneItemString = (MyClass, MyItem, MyName) => "Here I'm stuck. I need help from stackoverflow users"

PrivateObject objMyClass = new PrivateObject(typeof(MyClass));
            object[] parameters = new object[2] { myItem, workName };
            bool result = Convert.ToBoolean(objMyClass.Invoke("IsWorkDone", parameters));


Assert.AreEqual(result,true);
}

我想从statement =>设置oSite对象的值"使用(MyThing thingObj = new MyThing(item.ID))"来自我的主要MyClass类。 调试此行时抛出Object引用未设置为实例错误。

所以使用ShimMyClass.Allinstance如何获取或设置它的值?

1 个答案:

答案 0 :(得分:0)

你有很多不一致的地方,所以你的问题可能就是把它们搞得一团糟。如果您的实际代码更加一致,请更新您的帖子。主要的事情

  • 您显示私有方法IsComplete,但从您的Invoke方法调用isWorkflowCompleted
  • 你可能最终会打电话给你已经过去的#,然后我已经过了#34;这里我被困了#34;并尝试将该字符串转换为布尔值。

我调整了你的骨架,并在调整了一些名字之后让我去工作。