如何验证是否已使用Moq设置字符串数组中的值

时间:2013-12-09 23:30:32

标签: c# arrays moq

我有一个类Game,它依赖于具有Squares类型属性string[,]的对象。

我想验证调用Games.Play方法是否尝试适当地在依赖关系的Squares数组中设置一个值(例如,将下面的2D数组中的空值设置为某个值)。

var _grid = new Mock<IGrid>();
_grid.Setup(g => g.Squares).Returns({{"O", "O",null}});
var game = new Game(_x0Grid.Object);

var oblivion = game.Play();

_grid.VerifySet(g => g.Squares[0, 2] = It.IsAny<string>());

然而,试图验证上述抛出:

  

System.MissingMethodException:类型为&#39; System.String [,]&#39;的构造函数没找到。

有关如何使用Moq验证上述内容的任何建议?

2 个答案:

答案 0 :(得分:1)

VerifySet用于测试是否设置了mock上的属性。它无法检测数组的元素是否发生了变化。我的建议是测试数组的内容:

var array = new string[,] { {"O", "O", null } };
var _grid = new Mock<IGrid>();
_grid.Setup(g => g.Squares).Returns(array);
var game = new Game(_grid.Object);

var oblivion = game.Play();

Assert.IsNotNull(array[0, 3]);

答案 1 :(得分:1)

试试这个:

var _grid = new Mock<IGrid>();
_grid.Setup(g => g.Squares).Returns({{"O", "O",null}});
var game = new Game(_x0Grid.Object);

var oblivion = game.Play();

Assert.IsNotNull(g.Squares[0, 2]);

// AND/OR...
Assert.AreEqual("0", g.Squares[0, 2]);