所以我想测试骰子集的滚动结果,但是我不能像在返回方法中那样将数组作为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
答案 0 :(得分:0)
NSubstitute没有$ ls -al dir2
drwxr-xr-x 2 david david 4096 May 4 01:54 .
drwxr-xr-x 14 david david 49152 May 4 01:38 ..
-rw-r--r-- 1 david david 0 May 4 01:53 bar
-rw-r--r-- 1 david david 0 May 4 01:54 baz
-rw-r--r-- 1 david david 0 May 4 01:44 foo
(或类似)。相反,它有Returns<T>(T[] values)
表示我们应该始终指定至少一个要返回的值。当时的目的是避免在空集合的情况下使用“无值”来存根调用的可能令人困惑的情况。 (这是无操作吗?还是清除通话?)
有几种方法可以获得您想要的行为。一种方法是将值拆分为“first”和“rest”:
Returns<T>(T initialValue, params T[] otherValues)
另一种方法是使用Queue和存根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());
扩展名,该扩展名明确定义应如何处理空案例。