我对C#和单元测试有点陌生,我们在学校有一个作业,我很难理解,在电晕和在家上学的情况下,我很难从我的帮助中获得帮助。老师。
我的任务是创建一个方法,该方法可以找到数组中最大的数字,然后对其进行测试。该数组也应允许为空。
这是我到目前为止所拥有的:
public class Large
{
public int Find(int[] mynumbers)
{
int mylargest = mynumbers[0];
for (int i = 0; i < mynumbers.Length; i++)
{
if (mynumbers[i] > mylargest) mylargest = mynumbers[0];
}
return mylargest;
}
}
我的老师采用了这种方法,但我不太了解这种循环。我试图建立一个测试方法,但它不断返回数组中的第一个整数作为期望的数字。
[TestMethod]
public void TestMethod1()
{
//arrange
Large mynumber = new Large();
//act
int[] myarray = { 3, 5, 1, 7, 3, 8 };
int result = mynumber.Find(myarray);
//assert
Assert.AreEqual(3, result);
}
[当我尝试此操作时,我的测试通过了。但是,当我更改结果(应该是最大的结果)时,它会失败。
我没有得到什么?
总结:
单元测试的目的是证明主题代码在行使时表现出预期的效果。
第一步是编写一个声明预期行为的测试。
根据您当前的测试,它看起来应该像这样
[TestMethod]
public void Large_Find_Should_Return_Largest_Number_In_Array() {
//arrange
Large subjectUnderTest = new Large(); //Subject under test
int[] myarray = { 3, 5, 1, 7, 3, 8 }; //Known input
int expected = 8; //expected output
//act
int actual = subjectUnderTest.Find(myarray); //exercising the subject under test
//assert
Assert.AreEqual(expected, actual); //verifying/asserting expected behavior
}
运行此命令将失败,证明被测对象不正确。
通过可用于验证预期行为的测试,您现在可以将注意力集中在固定被测对象的逻辑上。
如果遍历Large类中的当前逻辑,您会发现在循环中,它总是将最大的设置为数组的第一项。
//...
for (int i = 0; i < mynumbers.Length; i++) {
if (mynumbers[i] > mylargest) mylargest = mynumbers[0]; <--
}
//..
我相信老师提供的所示代码是不正确的,目的是您试图弄清楚逻辑。
评估代码,尝试修复,然后使用测试确认行为并重复。