如何执行返回类型为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
}
断言是什么?既然它是空的,我怎么写断言呢?
在这个例子中,被测试的方法正在改变它的参数/依赖关系,你可以断言调用函数的期望结果是数据包的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;
}
}