Это функция, которую я тестирую:
Код: Выделить всё
public static void MinMaxSum(List arr)
{
long minSum = long.MaxValue;
long maxSum = long.MinValue;
long totalSum = default;
int n = arr.Count;
for (int i = 0; i < n; i++)
{
totalSum += arr[i];
}
for (int i = 0; i < n; i++)
{
long currentSum = totalSum - arr[i];
if (currentSum > maxSum)
{
maxSum = currentSum;
}
if (currentSum < minSum)
{
minSum = currentSum;
}
}
Console.WriteLine(minSum + " " + maxSum);
}
У меня есть два метода тестирования и весь файл Test1.cs:
Код: Выделить всё
namespace LCMinMaxSumTests
{
[TestClass]
public sealed class Test1
{
private TextWriter originalOut = null!;
private StringWriter sw = null!;
[TestInitialize]
public void SetOriginalConsoleOutput()
{
originalOut = Console.Out;
sw = new StringWriter();
Console.SetOut(sw);
}
[TestCleanup]
public void RestoreOriginalConsoleOutput()
{
Console.SetOut(originalOut);
sw.Flush();
sw.Close();
sw.Dispose();
}
[TestMethod]
public void TestMethod1()
{
List list = new List { 1, 3, 5, 7, 9 };
HCRNKMinMaxSum.Program.MinMaxSum(list);
string expected = string.Format($"16 24{Environment.NewLine}");
Assert.AreEqual(expected, sw.ToString());
}
[TestMethod]
public void TestMethod2()
{
List list = new List { 1, 2, 3, 4, 5 };
HCRNKMinMaxSum.Program.MinMaxSum(list);
string expected = string.Format($"10 14{Environment.NewLine}");
Assert.AreEqual(expected, sw.ToString());
}
}
}
VS: 17.12.3
.NET: 9
Я ожидаю, что результаты модульного теста будут соответствовать визуальным результатам, которые я получил при самостоятельном тестировании метода с пользовательскими данными в Main(). В первой версии этих двух методов не было разделов [TestInitialize] и [TestCleanup], но тела методов были заключены в оператор using, например:
Код: Выделить всё
using(StringWriter sw = new())
{
//body of a function
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... console-ou