我不知道我做错了什么,我正在处理现有的应用程序,并且我正在为这种方法创建一个单元测试。
在测试方法上,我模拟了视图并为项目分配了值
_fakeView.Setup(x => x.Bag.Amount).Returns((decimal)300.32);
(注意Amount是字符串)
我将视图对象传递给演示者并初始化
_presenter = new Presenter(_fakeView.Object);
_presenter.InitializeForm();
并且在现有的初始化代码中,他们有一行代码来重新分配这样的值:
this._view.Amount = this._view.Bag.Amount.ToString();
当这一行运行时,即使this._view.Bag.Amount.ToString()有值,this._view.Amount仍为null。
我甚至尝试过直接设置
this._view.Amount = "asdfgsdf"; but still null
请帮助
答案 0 :(得分:0)
仅仅因为你给某个值赋值,并不意味着它不能是null
。 this._view.Bag.Amount.ToString()
必须返回null。
这意味着,this._view
为空,this._view.Bag
为null
,或this._view.Bag.Amount
为null
,或ToString()
以某种方式失败。您必须检查值并找出null
的来源。
另外,如果Amount
为string
,为什么使用ToString()
?
修改:Amount
的代码可能是这样的:
// Get works as expected but set does literally nothing to change the backing field
private string amount = null;
public string Amount
{
get => amount;
set
{
// Do literally nothing
}
}
或者:
// Get will always return null, but set works as expected
prviate string amount;
public string Amount
{
get => null;
set => amount == value;
}
在这两个示例中,如果您尝试仅使用Amount
/ null
,则set
将始终返回get
。
您可以拨打SetAmount(string amount)
方法吗?
答案 1 :(得分:0)
我找到了我想念的东西..
_fakeView.SetupAllProperties();
我添加了这个
_fakeView.SetupAllProperties();
前
_fakeView.Setup(x => x.Bag.Amount).Returns((decimal)300.32);