C# 为SpecFlow单元测试将属性绑定到验证器
因此,我正在使用一个MVC应用程序,我的团队正在使用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属性。但是,出于某些单元测试的目的,我需要找出在测试设置中绑定验证的位置 我尝试了一些或
[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()
实现中增加更多责任,不再需要注册。感谢您考虑答案-即使我们无法给出答案:(