如何执行返回类型为Void的私有方法的Assert阶段

本文关键字:Void 有方法 阶段 Assert 返回类型 何执行 执行 | 更新日期: 2023-09-27 18:18:08

我有一个私有方法的类

public class MyClass 
{
    private void SomeMethod(PrimaryAllocationDP packet)
    {
        ........................
        some code
        ........................
        packet.AllocatedAgency = AgencyAllocated;
    }
} 
现在通过使用MSUnit测试框架,我已经写了到目前为止
[TestMethod]
public void TestAllocatedAgency()
{ 
    var packet = new Fixture().Create<PrimaryAllocationDP>(); //used AutoFixture here
    PrivateObject accessor = new PrivateObject(new MyClass());     
    accessor.Invoke("SomeMethod", packet); //Act
    // what will be the Assert? Since it is void
}

断言是什么?既然它是空的,我怎么写断言呢?

如何执行返回类型为Void的私有方法的Assert阶段

在这个例子中,被测试的方法正在改变它的参数/依赖关系,你可以断言调用函数的期望结果是数据包的AllocatedAgency属性实际上不是null

[TestMethod]
public void TestAllocatedAgency() { 
    //Arrange
    var packet = new Fixture().Create<PrimaryAllocationDP>(); //used AutoFixture here
    var sut = new MyClass();
    var accessor = new PrivateObject(sut);     
    //Act
    accessor.Invoke("SomeMethod", packet);
    //Assert
    Assert.IsNotNull(packet.AllocatedAgency);
}

如果您可以更改PrimaryAllocationDP,您还可以添加一个新接口IPrimaryAllocationDP并测试属性设置。在我的测试中,我假设AllocatedAgency是对象类型,我使用Moq。但也许你也可以使用AutoFixture来嘲弄?为了更清楚,我直接在MyClass

中设置AgencyAllocated
[TestFixture]
public class DependencyInjection
{
    [TestMethod]
    public void TestAllocatedAgency()
    {
        var packet = new Mock<IPrimaryAllocationDP>();
        PrivateObject accessor = new PrivateObject(new MyClass());
        accessor.Invoke("SomeMethod", packet.Object); //Act
        packet.VerifySet(p => p.AllocatedAgency = 42);
    }
}
public interface IPrimaryAllocationDP
{
    //object or any other type
    object AllocatedAgency { set; }
}
public class PrimaryAllocationDP : IPrimaryAllocationDP
{
    public object AllocatedAgency { set; private get; }
}
public class MyClass
{
    private readonly object AgencyAllocated = 42;
    private void SomeMethod(IPrimaryAllocationDP packet)
    {
        //........................
        //some code
        //........................
        packet.AllocatedAgency = AgencyAllocated;
    }
}