C# 为SpecFlow单元测试将属性绑定到验证器

C# 为SpecFlow单元测试将属性绑定到验证器,c#,asp.net-mvc-3,unit-testing,validation,specflow,C#,Asp.net Mvc 3,Unit Testing,Validation,Specflow,因此,我正在使用一个MVC应用程序,我的团队正在使用SpecFlow进行测试。我使用了所描述的[RequiredIf(prop,val)]的实现 然而,我发现了一个“轻微”的问题——虽然验证在网页上工作得很好,但它们破坏了我们的单元测试!经过调查,我发现该属性的IsValid()方法在我们的单元测试中被直接调用……很可能是因为该属性没有绑定到验证器 在那个博客上,我按照设置步骤向验证器注册RequiredIf属性。但是,出于某些单元测试的目的,我需要找出在测试设置中绑定验证的位置 我尝试了一些或

因此,我正在使用一个MVC应用程序,我的团队正在使用SpecFlow进行测试。我使用了所描述的
[RequiredIf(prop,val)]
的实现

然而,我发现了一个“轻微”的问题——虽然验证在网页上工作得很好,但它们破坏了我们的单元测试!经过调查,我发现该属性的IsValid()方法在我们的单元测试中被直接调用……很可能是因为该属性没有绑定到验证器

在那个博客上,我按照设置步骤向验证器注册RequiredIf属性。但是,出于某些单元测试的目的,我需要找出在测试设置中绑定验证的位置

我尝试了一些或多或少合乎逻辑的选择:

[Binding]
public class TestSteps
{
     // Every test has to call this helper to load up the controller...
     private void GoToHome()
     {
         // SNIP: Unimportant
         DataAnnotationsViewModelValidatorProvider.RegisterAdapter(..., ...);
     }
}
…以及在测试套件文件中

// See attribute for why I figured this may be a logical choice.
[BeforeScenario]
public void Setup()
{
    DataAnnotationsViewModelValidatorProvider.RegisterAdapter(..., ...);
}
…然而,由于某种原因,这两个位置都不会导致
RequiredIf()
绑定到其
RequiredIfValidator()


问题:对于单元测试,我应该将属性->验证器绑定放在哪里,以便我的单元测试能够正确验证在
RequiredIf()

的情况下修饰的属性?我必须承认我不熟悉MVC验证,所以这可能有效,也可能无效

然而,我猜如果你单独使用NUnit,你可能会想做这样的事情

[FixtureSetup]
public void ....()
{
    DataAnnotationsViewModelValidatorProvider.RegisterAdapter(..., ...);
}
目前,您实际上是通过绑定添加验证,这是一个完整的反射跳离

但是,如果查看自动生成的xxxxx.feature.cs文件,可以看到该类实际上定义为

[System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "1.8.1.0")]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[NUnit.Framework.TestFixtureAttribute()]
[NUnit.Framework.DescriptionAttribute("xxxxx")]
public partial class xxxxxFeature
{
显然,我们不能编辑它,但是我们可以创建另一个文件来实现分部类中我们喜欢的任何内容

在xxxxx.partial.cs中

public partial class xxxxxFeature
{
     [FeatureSetup]
     ....

如果没有别的,你还有几个地方可以尝试。祝你好运。

谢谢你的建议!现在,我决定在我的
RequiredIf.IsValid()
实现中增加更多责任,不再需要注册。感谢您考虑答案-即使我们无法给出答案:(