【发布时间】:2018-08-09 19:52:30
【问题描述】:
我一直在自学如何对应用程序的各个部分进行单元测试。我正在尝试对我的 UserService 进行单元测试。我似乎收到以下错误:
我不确定错误的含义。有人可以解释发生了什么吗?我知道该服务本身已经可以正常工作了,我已经单独对其进行了测试。我以前从未创建过单元测试,所以如果有人可以详细解释一下为什么会发生这种情况?
提前致谢!
用户服务测试
public class UserServiceTest
{
public readonly IUserService MockUserService;
public List<UserDTO> userDTOList = new List<UserDTO>
{
new UserDTO(new User{UserId = 1, FirstName = "Eric"}),
new UserDTO(new User{UserId = 1, FirstName = "Dave"}),
new UserDTO(new User{UserId = 1, FirstName = "Jim"})
};
public UserServiceTest()
{
Mock<IUserService> mockUserService = new Mock<IUserService>();
mockUserService.Setup(mr => mr.GetAllUsers()).Returns(userDTOList);
this.MockUserService = mockUserService.Object;
}
[TestMethod]
public void TestServiceGetUsers()
{
List<UserDTO> testUserList = this.MockUserService.GetAllUsers();
Assert.IsNotNull(testUserList);
Assert.AreEqual(userDTOList, testUserList);
}
}
WCF 接口
[ServiceContract]
public interface IUserService
{
[OperationContract]
List<UserDTO> GetAllUsers();
}
[DataContract]
public class UserDTO
{
public UserDTO(User user)
{
this.FirstName = user.FirstName;
this.LastName = user.LastName;
this.NumberOfItemsSold = user.NumberOfItemsSold;
this.UserId = user.UserId;
this.UserName = user.UserName;
}
[DataMember]
public int UserId { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public string UserName { get; set; }
[DataMember]
public int NumberOfItemsSold { get; set; }
}
WCF 接口实现
public class UserService : IUserService
{
public List<UserDTO> GetAllUsers()
{
using (UnitOfWork work = new UnitOfWork(new ProductContext()))
{
return work.Users.GetAll().Select(a => new UserDTO(a)).ToList();
}
}
}
根据 Mel Gerats 的建议进行编辑
好的,所以我想我会为我现在实际测试服务的单元测试放置更新的代码。这里是!再次感谢您的帮助。
[TestClass]
public class UserServiceTest
{
public List<UserDTO> userDTOList = new List<UserDTO>
{
new UserDTO(new User{UserId = 1, FirstName = "Eric"}),
new UserDTO(new User{UserId = 2, FirstName = "Dave"}),
new UserDTO(new User{UserId = 3, FirstName = "Jim"})
};
public IEnumerable<User> users = new List<User>
{
new User{UserId = 1, FirstName = "Eric"},
new User{UserId = 2, FirstName = "Dave"},
new User{UserId = 3, FirstName = "Jim"}
};
[TestMethod]
public void TestServiceGetUsers()
{
//Setup
var unitOfWorkMock = new Mock<IUnitOfWork>();
unitOfWorkMock.Setup(m => m.Users.GetAll()).Returns(users);
var serviceUnderTest = new UserService(unitOfWorkMock.Object);
var result = serviceUnderTest.GetAllUsers();
Assert.IsNotNull(result);
Assert.AreEqual(userDTOList.Count, result.Count);
Assert.AreEqual(userDTOList[0].FirstName, result[0].FirstName);
Assert.AreEqual(userDTOList[1].FirstName, result[1].FirstName);
}
}
由于某种原因,我无法直接测试这两个列表是否相等。我认为这是因为我的列表中列表的容量不同。所以我选择测试列表中的每个位置。
【问题讨论】:
-
您在测试项目中是否引用了
System.ServiceModel?
标签: c# unit-testing wcf moq