[英]Write unit test cases in VS2012
我是第一次使用VS2012編寫單元測試用例。
有人可以幫我編寫以下方法的單元測試用例嗎?
public myclasstype getEmployeeById(int empid)
{
// this method will return employee objects
}
只是可以對GetEmployeeById方法進行測試的概述:
[TestMethod]
public void GetEmployeeById_Id_Employee()
{
Employee employee = mockManager.MockObject<Employee>().Object;
employee.DateOfBirth = new DateTime(1970, 1, 1, 0, 0, 0);
using (RecordExpectations recorder = new RecordExpectations())
{
var dataLayer = new DataLayer();
recorder.ExpectAndReturn(dataLayer.GetEmployeeById(1), employee);
}
var company = new Company();
Employee result = company.GetEmployeeById(1);
Assert.AreEqual(result.DateOfBirth, employee.DateOfBirth);
}
這是一個相當廣泛的問題,但是可以說您有一個Employee
類...
public class Employee
{
private IEmployeeRepository _repo;
public Employee(IEmployeeRepository repo)
{
_repo = repo;
}
public Employee GetEmployeeById(int empid)
{
return _repo.GetEmployeeById(empid);
}
}
然后,您的測試需要是類似...
[Test]
public void Employee_GetEmployee_By_Id()
{
IEmployeeRepository repo = new FakeEmployeeRepository();
var employeeClass = new Employee(repo);
var employee = employee.GetEmployeeById(1);
//verify employee detail
}
這是非常基本的,但是可以給您一個想法。 顯然,您將擁有一個偽造的員工存儲庫,該存儲庫將僅返回一個預設置的員工,而在生產環境中,您將擁有一個實際的IEmployeeRepository
實現,該實現將連接到DB
。
public interface IEmployeeRepository
{
Employee GetEmployeeById(int id);
}
public class FakeEmployeeRepository : IEmployeeRepository
{
public Employee GetEmployeeById(int id)
{
return new Employee { ... };
}
}
這些都是手工輸入的,因此這里可能有錯誤...不過只是為了提供一個想法。
使用Assert類檢查結果
下面是步驟1.添加單元測試項目,Solution Explorer->添加->新項目->從模板->單元測試項目中選擇測試。 2.下載並添加對Moq庫的引用,您可以通過下面的Nuget命令執行此操作。 要獲取Nuget包管理器控制台,請轉到工具菜單->庫包管理器控制台->庫包管理器。 這應該在調試,錯誤窗口附近顯示Nuget軟件包管理器控制台。
install-package Moq
按下上述命令時,請確保已在Nuget軟件包管理器控制台的項目列表中選擇了測試項目。
可以說您定義了以下類
public class Employee
{public int Id {get; 組; }
public string Name { get; set; }
}
公共接口IEmployeeRepository {Employee GetById(int id); }
公共接口IUnitOfWork {T GetById(int id)其中T:new(); }
公共類UnitOfWork:IUnitOfWork {// IUnitOfWork的實現
//public T GetById<T>(int id) where T: new(); //{ // return new T(); //}
}
public class EmployeeRepository:IEmployeeRepository {//您要在此處注入工作單元public IUnitOfWork UnitOfWork {get; 組; }
public Employee GetById(int id) { // Making call to database here; return UnitOfWork.GetById<Employee>(id); }
}
右鍵單擊“單元測試”項目,然后單擊“添加”->“單元測試”,將“單元測試”添加到您的“單元測試”項目中。 下面是基於上述類的單元測試的示例代碼。
使用系統; 使用Microsoft.VisualStudio.TestTools.UnitTesting; 使用最小起訂量;
名稱空間UnitTestProject1 {[TestClass]公共類EmployeeUnitTest {模擬_unitOfWork; IEmployeeRepository _employeeRepository;
//This will be called before each test
[TestInitialize]
public void SetUp()
{
_unitOfWork = new Mock<IUnitOfWork>();
_employeeRepository = new EmployeeRepository();
}
[TestMethod]
public void GetById_ShouldCallUnitOfWork()
{
//Arrange
const int Id = 1;
_unitOfWork.Setup(x => x.GetById<Employee>(It.IsAny<int>())).Verifiable();
//Act
_employeeRepository.GetById(Id);
//Assert
_unitOfWork.Verify(x => x.GetById<Employee>(Id), Times.Once());
}
[TestMethod]
public void GetById_ShouldRetrunEmployee()
{
//Arrange
const int Id = 1;
var expectedEmp = new Employee { Id = Id, Name= "Emp"};
_unitOfWork.Setup(x => x.GetById<Employee>(It.IsAny<int>())).Returns(expectedEmp) ;
//Act
var employee = _employeeRepository.GetById(Id);
//Assert
Assert.AreEqual(expectedEmp, employee);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.