[英]Returning the result of a method that returns another substitute throws an exception in NSubstitute
[英]NSubstitute Returns method and arrays
所以我想测试掷骰子的掷骰结果,但是我不能像这样在Returns方法中将数组作为arg传递:
[TestCase(new[]{2, 2, 3, 1, 5}, Category.Yahtzee, 0)]
public void AddPoints_ForGivenCategory_PointsAreStored(
int[] rollResults, Category selectedCategory, int expectedScore)
{
_randomizer.GetRandomNumber(MIN_VALUE, MAX_VALUE).Returns(rollResults); //<-rollResults not allowed
IDice[] dice = MakeNewDiceSet();
_game.NewGame("A");
_game.RollDice(dice);
_game.AddPoints(selectedCategory);
var result = _game.GameStatus().First()[selectedCategory];
Assert.AreEqual(expectedScore, result);
}
任何提示或解决此问题的方法? 还是我被迫这样做:
[TestCase(2, 2, 3, 1, 5, Category.Yahtzee, 0)]
public void AddPoints_ForGivenCategory_PointsAreStored(
int die1, int die2, int die3, int die4, int die5, Category selectedCategory, int expectedScore)
{
_randomizer.GetRandomNumber(MIN_VALUE, MAX_VALUE).Returns(die1, die2, die3, die4, die5);
IDice[] dice = MakeNewDiceSet();
/ ...
}
使用NSubstitute v3.1.0.0
NSubstitute没有Returns<T>(T[] values)
(或类似Returns<T>(T[] values)
)。 相反,它具有Returns<T>(T initialValue, params T[] otherValues)
指示我们应始终指定至少一个要返回的值。 当时的目的是避免在出现空集合的情况下将呼叫存为“无值”的潜在混乱情况。 (这是无人操作吗?还是可以清除通话?)
有几种方法可以获取所需的行为。 一种方法是将值分为“ first”和“ rest”:
random.GetRandomNumber(1, 10)
.Returns(rollResults.First(), rollResults.Skip(1).ToArray());
另一种方法是使用队列和存根GetRandomNumber()
来使用此方法:
var rolls = new Queue<int>(rollResults);
random.GetRandomNumber(1, 10).Returns(_ => rolls.Dequeue());
如果这是您经常需要的东西,则可能值得创建自己的Returns
扩展,该扩展显式定义应如何处理空情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.