Dies ist die Funktion, die ich teste:
Code: Select all
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);
}
Das sind zwei Testmethoden und die gesamte Test1.cs-Datei, die ich habe:
Code: Select all
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
Ich gehe davon aus, dass die Ergebnisse des Unit-Tests mit den visuellen Ergebnissen übereinstimmen, die ich erhalten habe, als ich die Methode selbst mit benutzerdefinierten Daten in Main() getestet habe. Die erste Version dieser beiden Methoden bestand darin, dass es keine Abschnitte [TestInitialize] und [TestCleanup] gab, sondern die Methodenkörper in eine using-Anweisung eingeschlossen waren, etwa so:
Code: Select all
using(StringWriter sw = new())
{
//body of a function
}