单元测试重复问题
unit test repetition issue
测试在这里,它们非常重复,我想改变......
[TestClass]
public class CompareDataTest
{
private void GenerateTerms(int firstTerm, int secondTerm, out TaughtUnit firstGrade, out TaughtUnit secondGrade)
{
firstGrade = new TaughtUnit("foo");
secondGrade = new TaughtUnit("bar");
}
[TestMethod]
public void CompareResultsTest1()
{
var firstGrade = new TaughtUnit("foo");
firstGrade.Percentage.Add("GRADE", 38);
var secondGrade = new TaughtUnit("foo");
secondGrade.Percentage.Add("GRADE", 70);
var oldTerm = new List<TaughtUnit>() { firstGrade };
var newTerm = new List<TaughtUnit>() { secondGrade };
var rankBefore = firstGrade.Percentage;
var rankNow = secondGrade.Percentage;
var messages = Program.CompareData(oldTerm, newTerm);
Assert.AreEqual(0, messages.Count);
}
[TestMethod]
public void CompareResultsTest2()
{
var firstGrade = new TaughtUnit("foo");
firstGrade.Percentage.Add("GRADE", 0);
var secondGrade = new TaughtUnit("foo");
secondGrade.Percentage.Add("GRADE", 35);
var oldTerm = new List<TaughtUnit>() { firstGrade };
var newTerm = new List<TaughtUnit>() { secondGrade };
var rankBefore = firstGrade.Percentage;
var rankNow = secondGrade.Percentage;
int gradeOld = 0; int gradeNew = 10;
var getGradeOld = firstGrade.Percentage.TryGetValue("GRADE", out gradeOld);
var getGradeNew = secondGrade.Percentage.TryGetValue("GRADE", out gradeNew);
var difference = gradeNew - gradeOld;
var messages = Program.CompareData(oldTerm, newTerm);
Assert.AreEqual(1, messages.Count);
Assert.AreEqual("foo: GRADE rank has dropped by 30", messages[0]);
}
我想我应该在测试集之前使用 private void,但我不知道如何...
我如何引用private void中创建的内容?
在测试 class 级别声明那些变量。使用私有方法填充设置变量。
[TestClass]
public class CompareDataTest
{
private TaughtUnit firstGrade;
private TaughtUnit secondGrade;
private void GenerateTerms(int firstTerm, int secondTerm, out TaughtUnit firstGrade, out TaughtUnit secondGrade)
{
firstGrade = new TaughtUnit("foo");
secondGrade = new TaughtUnit("bar");
}
[TestMethod]
public void CompareResultsTest1()
{
GenerateTerms(..., ..., ..)
firstGrade.Percentage.Add("GRADE", 38);
secondGrade.Percentage.Add("GRADE", 70);
// rest of other things you want to set specific to the test.
Assert.AreEqual(0, messages.Count);
}
}
NUnit Framework 有多种方法可以为您的测试传递值源。
例如,我可以像这样测试 Guid.Parse
public static Dictionary<int, string> Datas
{
get
{
return Enumerable.Range(0, 100) //Lots of numbers
.ToDictionary(x => x, x => Guid.NewGuid().ToString());
}
}
[Test]
public void MultiCacheTest([ValueSource("Datas")] KeyValuePair<int, string> item)
{
//ACT ...Yes this tests Guid.Parse 100 times
var value = Guid.Parse(item.value);
Assert.AreEqual(item.Value, value.ToString());
}
我们的想法是传递测试您的 unit 可能采用的所有不同路径所需的所有 purmutations,并允许对的键作为方法的输入值,该对的值为预期结果。在您的情况下,您可能会传入 2 个百分比值,因为键 "0|35" 和 "foo: GRADE rank has dropped by 30" 将是预期值。
测试在这里,它们非常重复,我想改变......
[TestClass]
public class CompareDataTest
{
private void GenerateTerms(int firstTerm, int secondTerm, out TaughtUnit firstGrade, out TaughtUnit secondGrade)
{
firstGrade = new TaughtUnit("foo");
secondGrade = new TaughtUnit("bar");
}
[TestMethod]
public void CompareResultsTest1()
{
var firstGrade = new TaughtUnit("foo");
firstGrade.Percentage.Add("GRADE", 38);
var secondGrade = new TaughtUnit("foo");
secondGrade.Percentage.Add("GRADE", 70);
var oldTerm = new List<TaughtUnit>() { firstGrade };
var newTerm = new List<TaughtUnit>() { secondGrade };
var rankBefore = firstGrade.Percentage;
var rankNow = secondGrade.Percentage;
var messages = Program.CompareData(oldTerm, newTerm);
Assert.AreEqual(0, messages.Count);
}
[TestMethod]
public void CompareResultsTest2()
{
var firstGrade = new TaughtUnit("foo");
firstGrade.Percentage.Add("GRADE", 0);
var secondGrade = new TaughtUnit("foo");
secondGrade.Percentage.Add("GRADE", 35);
var oldTerm = new List<TaughtUnit>() { firstGrade };
var newTerm = new List<TaughtUnit>() { secondGrade };
var rankBefore = firstGrade.Percentage;
var rankNow = secondGrade.Percentage;
int gradeOld = 0; int gradeNew = 10;
var getGradeOld = firstGrade.Percentage.TryGetValue("GRADE", out gradeOld);
var getGradeNew = secondGrade.Percentage.TryGetValue("GRADE", out gradeNew);
var difference = gradeNew - gradeOld;
var messages = Program.CompareData(oldTerm, newTerm);
Assert.AreEqual(1, messages.Count);
Assert.AreEqual("foo: GRADE rank has dropped by 30", messages[0]);
}
我想我应该在测试集之前使用 private void,但我不知道如何... 我如何引用private void中创建的内容?
在测试 class 级别声明那些变量。使用私有方法填充设置变量。
[TestClass]
public class CompareDataTest
{
private TaughtUnit firstGrade;
private TaughtUnit secondGrade;
private void GenerateTerms(int firstTerm, int secondTerm, out TaughtUnit firstGrade, out TaughtUnit secondGrade)
{
firstGrade = new TaughtUnit("foo");
secondGrade = new TaughtUnit("bar");
}
[TestMethod]
public void CompareResultsTest1()
{
GenerateTerms(..., ..., ..)
firstGrade.Percentage.Add("GRADE", 38);
secondGrade.Percentage.Add("GRADE", 70);
// rest of other things you want to set specific to the test.
Assert.AreEqual(0, messages.Count);
}
}
NUnit Framework 有多种方法可以为您的测试传递值源。
例如,我可以像这样测试 Guid.Parse
public static Dictionary<int, string> Datas
{
get
{
return Enumerable.Range(0, 100) //Lots of numbers
.ToDictionary(x => x, x => Guid.NewGuid().ToString());
}
}
[Test]
public void MultiCacheTest([ValueSource("Datas")] KeyValuePair<int, string> item)
{
//ACT ...Yes this tests Guid.Parse 100 times
var value = Guid.Parse(item.value);
Assert.AreEqual(item.Value, value.ToString());
}
我们的想法是传递测试您的 unit 可能采用的所有不同路径所需的所有 purmutations,并允许对的键作为方法的输入值,该对的值为预期结果。在您的情况下,您可能会传入 2 个百分比值,因为键 "0|35" 和 "foo: GRADE rank has dropped by 30" 将是预期值。