У меня есть публичный статический метод, который использует объект класса Random для генерации целого числа. Затем целое число становится индексом списка. Я хочу проверить логику метода, имея контроль над тем, что возвращает метод Next случайного объекта.
public class RandomGenerator
{
// a static method which produces a random selection from a List
public static string GetRandomListMember(List<string> anyStringList)
{
Random rand = new Random();
int randomInt = rand.Next(anyStringList.Count);
return anyStringList[randomInt];
}
}
Из моего файла MSTest:
[TestClass]
public class RandomGeneratorSpec
{
[TestMethod]
public void GetRandomListMember_ListOfStrings()
{
List<string> strings = new List<string> { "red", "yellow", "green" };
Mock<Random> mockRandom = new Mock<Random>();
mockRandom.Setup(rand => rand.Next(strings.Count)).Returns(() => 2); // 2!
string result = RandomGenerator.GetRandomListMember(strings);
Assert.AreEqual("green", result);
}
}
Я хочу, чтобы mockRandom.Next toвозвращайте 2 каждый раз, когда он запускается в этом тесте. Очевидно, это не способ сделать это. Я искал примеры, но все они, кажется, используют методы объекта и методы экземпляра вместо статических методов.
Как мне контролировать, что возвращает встроенный метод при модульном тестировании метода, которыйиспользует это?