0

I feel like I have to be missing something that is obvious, or I am overcomplication what I am doing. I am attempting to test a method that contains several other methods. One method is passed an object to write data to a database, in which the ID will be updated. This ID is then set to a local variable and used in other methods and the return. I can't get my Assert.AreEqual to work because the ID out is always 0 when I expect it to be 12. I have not had a lot of experience with UnitTesting and less with JuskMock. I assume I am doing something wrong.

This simplified pseudo code demonstrates my issue.

public class MyObj: IMyObject
{
    public int ID { get; set; }
    public string Name {get;set;}

}
    public int Query(string Name)
    {
  int ID = 0;
  ID = _setID.FindPerson(Name);

  if(ID = 0)
    {

        IMyObject myObj = new MyObj(0, Name);

            _setID.WritePerson(myObj);

            ID = myObj.ID;
    }

    _setID.WriteSomethingElse(ID)   

        return ID;
    }


public delegate void SetIDDelegate<T1, T2>(T1 arg1, T2 arg2);

[TestMethod]
    public void TestQuery_ReturnID()
    {
        IMyObject UTobj = new MyObj { 
            ID = 12, 
            msg = string.Empty 
        };


        Mock.Arrange(() => _mockSetID.WritePerson(
            Arg.IsAny<IMyObject>(), 
            ))
            .DoInstead(new SetIDDelegate<IMyObject, string>
            ((IMyObject a, string b) =>
            {
                a = UTobj;
            }
            )).MustBeCalled();

        int IDout = _objProcessObj.Query();

        Mock.Assert(_mockSetID);
        Assert.AreEqual(UTobj.ID, IDout);

    }
Thomas Tempelmann
  • 11,045
  • 8
  • 74
  • 149

1 Answers1

0

I was able to figure out my issue with my UT. I needed to update the object in the delegate, not replace it.

        .DoInstead(new SetIDDelegate<IMyObject, string>
        ((IMyObject a, string b) =>
        {
            a.ID = UTobj.ID;
        }