Unit testing 如何在C#Microsoft fakes单元测试中使用垫片类获取和设置对象的值?

Unit testing 如何在C#Microsoft fakes单元测试中使用垫片类获取和设置对象的值?,unit-testing,microsoft-fakes,shim,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()) {

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

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);
}
我想从MyClass主类中的语句=>“using(MyThing thingObj=new MyThing(item.ID))”设置oSite对象的值。 调试时,此行抛出对象引用未设置为实例错误


因此,使用ShimMyClass.Allinstance如何获取或设置它的值?

您有很多不一致之处,因此您的问题可能只是将它们排除在外。如果您认为实际代码更加一致,请更新您的帖子。主要的事情

  • 显示私有方法IsComplete,但从Invoke方法调用isWorkflowCompleted
  • 您可能会调用您的shimmed方法,该方法将传递“我被卡住了”,并尝试将该字符串转换为布尔值

我伪造了你的骨架,并在调整了一些名称后让我的骨架开始工作。

我在测试方法中使用了以下代码解决了这个问题:很高兴听到你让它工作了。取得一些进步总是感觉很好。