您是否应该在所有单元测试中对数据进行硬编码?
那里的大多数单元测试教程/示例通常涉及为每个单独的测试定义要测试的数据。我猜这是“一切都应该隔离测试”理论的一部分。 但是我发现,当处理具有大量DI的多层应用程序时,设置每个测试所需的代码将花费很长的时间。取而代之,我建立了许多测试库类,现在可以继承这些类,其中已经预先构建了许多测试框架。 作为此过程的一部分,我还将构建代表运行中的应用程序数据库的伪数据集,尽管每个“表”中通常只有一两行。 是否预先定义(如果不是全部)所有单元测试中的大多数测试数据,这是公认的做法吗? 更新资料 从下面的评论中,确实感觉到我在进行比单元测试更多的集成。 我当前的项目是ASP.NET MVC,它使用实体框架代码优先的工作单元和Moq进行测试。我已经模拟了UoW和存储库,但是我正在使用真实的业务逻辑类,并测试控制器操作。测试通常会检查UoW是否已提交,例如: [TestClass] public class SetupControllerTests : SetupControllerTestBase { [TestMethod] public void UserInvite_ExistingUser_DoesntInsertNewUser() { // Arrange var model = new Mandy.App.Models.Setup.UserInvite() { Email = userData.First().Email }; // Act setupController.UserInvite(model); // Assert mockUserSet.Verify(m => m.Add(It.IsAny<UserProfile>()), Times.Never); mockUnitOfWork.Verify(m => m.Commit(), Times.Once); } } SetupControllerTestBase正在构建模拟单元,并实例化userLogic。 许多测试需要在数据库中拥有现有用户或产品,因此在此示例中userData,我已经预先填充了模拟UoW返回的内容,它只是一个IList<User>用户记录。