我是使用VS2012编写单元测试用例的新手。
有人可以帮我编写以下方法的单元测试用例吗?
public myclasstype getEmployeeById(int empid)
{
// this method will return employee objects
}
答案 0 :(得分:1)
只是概述了您可以在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);
}
答案 1 :(得分:0)
这是一个非常广泛的问题,但可以说你有一个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
}
这是非常基本的,但会给你一个想法。显然,您将拥有一个Fake Employee Repository,它只返回一个预先设置好的Employee,在生产中,您将拥有IEmployeeRepository
的实际实现,例如,它将连接到DB
。
public interface IEmployeeRepository
{
Employee GetEmployeeById(int id);
}
public class FakeEmployeeRepository : IEmployeeRepository
{
public Employee GetEmployeeById(int id)
{
return new Employee { ... };
}
}
这是所有手动输入的,所以这里可能有错误......它只是提出一个想法。
答案 2 :(得分:0)
使用Assert类检查结果
答案 3 :(得分:0)
以下是步骤 1.添加单元测试项目,解决方案资源管理器 - &gt;添加 - &gt;新项目 - &gt;从模板中选择测试 - &gt;单元测试项目。 2.下载并添加对Moq库的引用,您可以通过下面的Nuget命令执行该操作。要获取Nuget Package Manager控制台,请转到“工具”菜单 - &gt;库包管理器控制台 - &gt;库包管理器。这应该显示Nuget包管理器控制台靠近debug,错误窗口。
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(); }
public class UnitOfWork:IUnitOfWork { // IUnitOfWork的实现
//public T GetById<T>(int id) where T: new();
//{
// return new T();
//}
}
公共类EmployeeRepository:IEmployeeRepository { //你在这里注射工作单位 public IUnitOfWork UnitOfWork {get;组; }
public Employee GetById(int id)
{
// Making call to database here;
return UnitOfWork.GetById<Employee>(id);
}
}
右键单击Unit Test项目,Add - &gt;将UnitTest添加到UnitTest项目中。单元测试。 以下是基于上述类的单元测试的示例代码。
使用System; 使用Microsoft.VisualStudio.TestTools.UnitTesting; 使用Moq;
命名空间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);
}
}
}