Unit testing 需要保证单元测试和最佳实践
我已经7个月没有做TDD和单元测试了,我有点忘记了。我现在在一家想开始做这件事的商店里,但我是那里唯一的一个 也不完全是这件事的专家 我有点生疏了,我收到了各种各样的问题,很多时候我不能给出一个正确的答案 我得到的典型问题是:Unit testing 需要保证单元测试和最佳实践,unit-testing,moq,Unit Testing,Moq,我已经7个月没有做TDD和单元测试了,我有点忘记了。我现在在一家想开始做这件事的商店里,但我是那里唯一的一个 也不完全是这件事的专家 我有点生疏了,我收到了各种各样的问题,很多时候我不能给出一个正确的答案 我得到的典型问题是: 我看不出有什么问题 集成测试?我告诉他们是的 慢点,你永远不应该这样做 如果我 无法测试privateMethod(我知道 MSTest做什么)这有什么意义 测试?我所有的重要方法都是 私人的 我看不出设立一个 期望并返回一个结果 考试满意吗 您使用的典型单元测试是什么
- 我看不出有什么问题 集成测试?我告诉他们是的 慢点,你永远不应该这样做 如果我 无法测试privateMethod(我知道 MSTest做什么)这有什么意义 测试?我所有的重要方法都是 私人的 我看不出设立一个 期望并返回一个结果 考试满意吗 您使用的典型单元测试是什么 应该在每一层中执行吗?应该 您只在边界级别进行测试 怎么 我是否测试存储过程返回 预期的结果是什么
//property has changed
[TestMethod]
public void Should_be_able_to_test_that_customer_description_propertyChanged_was_raised()
{
//act
var customerResponse=new CustomerResponse{Description = "Test"};
var customerViewModel = new CustomerViewModel(customerResponse);
var eventWasRaised = false;
customerViewModel.PropertyChanged += (sender, e) => eventWasRaised = e.PropertyName == "Description";
customerViewModel.Description = "DescriptionTest";
Assert.IsTrue(eventWasRaised, "PropertyChanged event was not raised correctly.");
}
//Testing a method on the view model has been called
[Test]
public void Should_be_able_to_test_that_insert_method_on_view_Model_has_been_executed()
{
var mock = new Mock<IRepository>();
var employeeVm = new EmployeeVM(mock.Object) {Age = 19};
employeeVm.SaveCommand.Execute(null);
mock.Verify(e=>e.Insert(It.IsAny<Employee>()));
}
//属性已更改
[测试方法]
public void应该能够测试客户描述属性是否已更改
{
//表演
var customerResponse=new customerResponse{Description=“Test”};
var customerViewModel=新的customerViewModel(customerrresponse);
var eventwasrised=false;
customerViewModel.PropertyChanged+=(发件人,e)=>eventWasRaised=e.PropertyName==“描述”;
customerViewModel.Description=“DescriptionTest”;
IsTrue(EventWasRised,“PropertyChanged事件未正确引发”);
}
//已调用在视图模型上测试方法
[测试]
public void应该能够测试是否在视图上插入方法,模型已经执行()
{
var mock=new mock();
var employeeVm=newemployeevm(mock.Object){Age=19};
employeeVm.SaveCommand.Execute(null);
mock.Verify(e=>e.Insert(It.IsAny());
}
WCF单元测试
//测试1模拟服务
[TestMethod]
public void Should_be_able_to_verify_getCustomer_has_been_called)
{
var mockService = new Mock<ICustomer>();
var expectedCustomer=new Customer{Id=1,Name="Jo"};
mockService.Setup(x => x.GetCustomer(It.IsAny<int>())).Returns(expectedCustomer);
var customerViewModel = new customerViewModel(mockService.Object);
customerViewModel.GetCustomer.Execute(null);
mockService.Verify(x=>x.GetCustomer(),Times.AtLeastOnce());
}
//Test 2 mocking the repository
[TestMethod]
public void Should_be_able_to_verify_getCustomer_has_been_called_on_the_service)
{
var mockRepository = new Mock<IRepositoryCustomer>();
var expectedCustomer=new Customer{Id=1,Name="Jo"};
mockRepository.Setup(x => x.GetCustomer(It.IsAny<int>())).Returns(expectedCustomer);
var customerService = new CustomerService(mock.Object);
customerService.GetCustomer(1);
mockRepository.Verify(x=>x.GetCustomer(),Times.AtLeastOnce());
}
[TestMethod]
public void应\u能够\u验证\u getCustomer \u是否已被调用)
{
var mockService=new Mock();
var expectedCustomer=新客户{Id=1,Name=“Jo”};
mockService.Setup(x=>x.GetCustomer(It.IsAny()).Returns(expectedCustomer);
var customerViewModel=新的customerViewModel(mockService.Object);
customerViewModel.GetCustomer.Execute(空);
验证(x=>x.GetCustomer(),Times.atlestOnce());
}
//测试2模拟存储库
[测试方法]
public void应该\u能够\u验证\u getCustomer\u已经\u在\u服务上调用了\u)
{
var mockRepository=new Mock();
var expectedCustomer=新客户{Id=1,Name=“Jo”};
mockRepository.Setup(x=>x.GetCustomer(It.IsAny()).Returns(expectedCustomer);
var customerService=新的customerService(mock.Object);
customerService.GetCustomer(1);
验证(x=>x.GetCustomer(),Times.atlestOnce());
}
好的,让我们看看我是否能回答
慢点,你永远不应该这样做
集成测试现在是一个重载术语。
当您编写单元测试时,您希望用费时/不可预测/昂贵的真实协作者来代替伪造/模拟,这样您就可以专注于自己的代码(并假设真实协作者满足假定的契约)。这可以帮助您在很短的时间内运行单元测试,从而加快反馈和进度。此外,测试失败现在表明代码中存在错误。。反之,任何依赖项中的任何错误都可能导致测试失败
您还需要其他(缓慢的)测试来验证真正的合作伙伴(例如DAL)是否按照合同行事。(我现在倾向于称这些集成测试)
如果我不能测试privateMethod(我知道MSTest有),那么这有什么意义
测试?我所有的重要方法都是
私人的
私有方法应该通过使用它们的公共接口进行测试。为调用私有方法的公共方法编写测试。。如果不能做到这一点,可能私有方法或其部分是多余的
我看不出设立一个
期望并返回一个结果
考试满意吗
请参阅答案#1-您假设真正的依赖关系将按照约定的合同进行。这使您能够专注于使用依赖项编写的代码
您使用的典型单元测试是什么
应该在每一层中执行吗?应该
您只在边界级别进行测试
单元测试应测试对象,验收测试应验证所有对象在相互插入时是否一起工作
如何测试存储过程以返回预期结果
编写一个测试,针对已知的参考数据库执行DAL,并验证预期结果。这应该被标记为慢集成测试(根据我选择的定义)。您编写的测试是一个非常好的开始!试一试,练习,弄清楚什么是有效的,什么是无效的,就是任何一个“上师”如何首先成为一个“上师”。(我还没有见过任何“大师”,只是有多年实践经验的人) 这里有几个问题,我将依次回答 集成测试非常慢,是的 对于整个系统中的某些关键场景,我通常从Gui或web页面对整个应用程序执行此操作,因为执行sam
I dont see anything wrong with integration Testing? I told them is