Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 需要保证单元测试和最佳实践_Unit Testing_Moq - Fatal编程技术网

Unit testing 需要保证单元测试和最佳实践

Unit testing 需要保证单元测试和最佳实践,unit-testing,moq,Unit Testing,Moq,我已经7个月没有做TDD和单元测试了,我有点忘记了。我现在在一家想开始做这件事的商店里,但我是那里唯一的一个 也不完全是这件事的专家 我有点生疏了,我收到了各种各样的问题,很多时候我不能给出一个正确的答案 我得到的典型问题是: 我看不出有什么问题 集成测试?我告诉他们是的 慢点,你永远不应该这样做 如果我 无法测试privateMethod(我知道 MSTest做什么)这有什么意义 测试?我所有的重要方法都是 私人的 我看不出设立一个 期望并返回一个结果 考试满意吗 您使用的典型单元测试是什么

我已经7个月没有做TDD和单元测试了,我有点忘记了。我现在在一家想开始做这件事的商店里,但我是那里唯一的一个 也不完全是这件事的专家

我有点生疏了,我收到了各种各样的问题,很多时候我不能给出一个正确的答案

我得到的典型问题是:

  • 我看不出有什么问题 集成测试?我告诉他们是的 慢点,你永远不应该这样做

    如果我 无法测试privateMethod(我知道 MSTest做什么)这有什么意义 测试?我所有的重要方法都是 私人的

    我看不出设立一个 期望并返回一个结果 考试满意吗

    您使用的典型单元测试是什么 应该在每一层中执行吗?应该 您只在边界级别进行测试

    怎么 我是否测试存储过程返回 预期的结果是什么

你认为下面的测试对你有意义吗?你通常会在每一层做什么样的测试?有代码的例子吗

我做三种测试

1) 查看模型测试

2) Wcf通过模拟服务进行测试

3) Wcf集成测试,但模拟Dal

你是这样做的吗?如果你认为这是错误的,你能纠正我吗?你能改进他们吗

视图模型测试 财产发生了变化 下面的示例调用了和方法

      //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