[英]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.