c#赋值

时间:2018-05-22 02:30:28

标签: c#

我不知道我做错了什么,我正在处理现有的应用程序,并且我正在为这种方法创建一个单元测试。

在测试方法上,我模拟了视图并为项目分配了值

_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

请帮助

2 个答案:

答案 0 :(得分:0)

仅仅因为你给某个值赋值,并不意味着它不能是nullthis._view.Bag.Amount.ToString()必须返回null。

这意味着,this._view为空,this._view.Bagnull,或this._view.Bag.Amountnull,或ToString()以某种方式失败。您必须检查值并找出null的来源。

另外,如果Amountstring,为什么使用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);