【问题标题】:Moq testing void methods with out parameters最小起订量测试无参数的无效方法
【发布时间】:2017-01-10 02:38:49
【问题描述】:

嗨,请告诉我如何为以下方法编写最小起订量单元测试用例。任何帮助将不胜感激。在此先感谢。

public void ConstructAddMappingQuery(IAnnotationMapping annotationMappings, 
                                     out string commandText, 
                                     out Dictionary<string, dynamic> parameters)
{
   commandText =@"Insert Into AnnotationMapping Values 
                 (@AnnotationSetupId, @WordToAnnotate, 
                  @Annotation, @CreatedDttm, @CreatedUserId, @ModifiedDate, 
                  @ModifiedUserId, @IsActive)";

   parameters = new Dictionary<string, dynamic>();
   parameters.Add("@WordToAnnotate", annotationMappings.WordToAnnotate);
   parameters.Add("@Annotation", annotationMappings.Annotation);
   parameters.Add("@ModifiedDate", annotationMappings.ModifiedDate);
   parameters.Add("@ModifiedUserId", annotationMappings.ModifiedUserId);
   parameters.Add("@AnnotationSetupId", annotationMappings.AnnotationSetupId);
   parameters.Add("@CreatedDttm", annotationMappings.CreatedDttm);
   parameters.Add("@CreatedUserId", annotationMappings.CreatedUserId);
   parameters.Add("@IsActive", 1);
}

寻找整个方法而不是存根。干杯!!!!!!!!!!!!

【问题讨论】:

标签: c# unit-testing moq


【解决方案1】:

假设一个类像

public class AnnotationMappingQueryBuilder {
    public void ConstructAddMappingQuery(IAnnotationMapping annotationMappings,
                                 out string commandText,
                                 out Dictionary<string, dynamic> parameters) {
        commandText = @"Insert Into AnnotationMapping Values 
             (@AnnotationSetupId, @WordToAnnotate, 
              @Annotation, @CreatedDttm, @CreatedUserId, @ModifiedDate, 
              @ModifiedUserId, @IsActive)";

        parameters = new Dictionary<string, dynamic>();
        parameters.Add("@WordToAnnotate", annotationMappings.WordToAnnotate);
        parameters.Add("@Annotation", annotationMappings.Annotation);
        parameters.Add("@ModifiedDate", annotationMappings.ModifiedDate);
        parameters.Add("@ModifiedUserId", annotationMappings.ModifiedUserId);
        parameters.Add("@AnnotationSetupId", annotationMappings.AnnotationSetupId);
        parameters.Add("@CreatedDttm", annotationMappings.CreatedDttm);
        parameters.Add("@CreatedUserId", annotationMappings.CreatedUserId);
        parameters.Add("@IsActive", 1);
    }
}

您只需要接口的起订量。测试可能如下所示。

[TestClass]
public class UnitTest1 {
    [TestMethod]
    public void TestMethod1() {

        //Arrange
        var mock = Mock.Of<IAnnotationMapping>();

        var expectedCommandText = @"Insert Into AnnotationMapping Values 
             (@AnnotationSetupId, @WordToAnnotate, 
              @Annotation, @CreatedDttm, @CreatedUserId, @ModifiedDate, 
              @ModifiedUserId, @IsActive)";
        string commandText = null;
        Dictionary<string, dynamic> parameters = null;
        int expectedParameterCount = 8;
        var sut = new AnnotationMappingQueryBuilder();

        //Act
        sut.ConstructAddMappingQuery(mock, out commandText, out parameters);

        //Assert
        Assert.IsNotNull(commandText);
        Assert.AreEqual(expectedCommandText, commandText);

        Assert.IsNotNull(parameters);
        Assert.AreEqual(expectedParameterCount, parameters.Count);
        ///what ever else you want to assert for parameters
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    相关资源
    最近更新 更多