我的单元测试中有这个奇怪的问题。请参阅以下代码
_pos = null;
Utilities.InitPOS(_pos, trans);
Assert.IsNotNull(_pos); //fails
InitPOS
函数看起来像
public static void InitPOS(POSImplementation pos, Transaction newTransaction)
{
pos = new POSImplementation();
pos.SomeProp = new SomeProp();
pos.SomeProp.SetTransaction(newTransaction);
Assert.IsNotNull(pos);
Assert.IsNotNull(pos.SomeProp);
}
对象POSImplementation
是某个接口的实现,它是一个类,所以它是一个引用类型......
有什么想法吗?
答案 0 :(得分:8)
您将对象的引用传递给InitPOS
(即null
引用),而不是对名为_pos
的变量的引用。结果是新POSImplementation
实例已分配给pos
方法中的局部变量InitPOS
,但_pos
变量保持不变。
将您的代码更改为
_pos = Utilities.InitPOS(trans);
Assert.IsNotNull(_pos);
,其中
public static POSImplementation InitPOS(Transaction newTransaction)
{
POSImplementation pos = new POSImplementation();
// ...
return pos;
}
答案 1 :(得分:1)
pos = new POSImplementation();
如果有人将pos
传递给方法,那你在那里做什么?您是否错过了该参数的ref
属性?
答案 2 :(得分:1)
您不通过引用传递 实例 , 您按价值 传递 参考。