2016-03-03 64 views
0

测试在这里,他们是非常重复,我想改变...单元测试的重复问题

 [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]); 
     } 

我想我这组测试前,应使用私人无效,但我不知道如何... 我如何参考私人空间中创建的内容?

回答

0

在Test类级别声明这些变量。使用私有方法填充设置变量。

[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); 
    } 
} 
0

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());   
    } 

的想法是通过测试所有的单元可以采取不同的路径,并允许对的key所需的所有purmutations作为该方法的输入值,该对的值是预期的结果。在你的情况下,你可能会传递2个百分比值作为密钥“0 | 35”“foo:GRADE等级已经下降了30”将是预期值。