在博客開始以前,咱們先討論一下是否應該對private方法作測試,一般有兩種觀點:函數
咱們如下面的代碼爲例子來進行說明:單元測試
public class Salary { public int Calcuate(int bs, int nwd) { int ts; if(IsValidNwd(nwd)) { ts = bs * nwd; } else { ts = 1000; } return ts; } private bool IsValidNwd(int nwd) { if(nwd > 8) { return true; } else { return false; } } }
這個被測試類中包含兩個方法:測試
觀點1: private方法不該該被單獨測試,這是由於public方法中會使用到這些私有方法當咱們測試public方法時,private方法的行爲會被一併測試掉。對象
觀點2: 要對private方法進行單獨的測試。blog
有兩種方式能夠對private方法作單元測試,get
下面的示例中使用PrivateObject類來完成,博客
[TestClass] public class SalaryFunctionalTesting { [TestMethod] public void IsValidNwd_ValidInput_ReturnTrue() { PrivateObject obj = new PrivateObject(typeof(Salary)); bool result = Convert.ToBoolean(obj.Invoke("IsValidNwd",9)); Assert.AreEqual(true, result); } [TestMethod] public void IsValidNwd_InValidInput_ReturnFalse() { PrivateObject obj = new PrivateObject(typeof(Salary)); bool result = Convert.ToBoolean(obj.Invoke("IsValidNwd", 6)); Assert.AreEqual(false, result); } }
上述代碼中,執行了以下任務:it
感謝您的閱讀~io