Unit testing 单元测试从私有访问器抛出ArgumentOutOfRange

Unit testing 单元测试从私有访问器抛出ArgumentOutOfRange,unit-testing,mstest,Unit Testing,Mstest,我的单元测试项目中有一个VS生成的私有访问器。在测试中,我定义了一个ExpectedException属性,我的测试方法抛出了这个属性。但是,然后单元测试抛出ArgumentOutOfRangeException参数name:index,我的测试失败。我不知道为什么会这样 at Microsoft.VisualStudio.TestTools.UnitTesting.Helper.ThrowInnerException(TargetInvocationException outer) at Mi

我的单元测试项目中有一个VS生成的私有访问器。在测试中,我定义了一个ExpectedException属性,我的测试方法抛出了这个属性。但是,然后单元测试抛出ArgumentOutOfRangeException参数name:index,我的测试失败。我不知道为什么会这样

at Microsoft.VisualStudio.TestTools.UnitTesting.Helper.ThrowInnerException(TargetInvocationException outer)
at Microsoft.VisualStudio.TestTools.UnitTesting.PrivateObject.Invoke(String name, BindingFlags bindingFlags, Type[] parameterTypes, Object[] args, CultureInfo culture, Type[] typeArguments)
at Microsoft.VisualStudio.TestTools.UnitTesting.PrivateObject.Invoke(String name, Type[] parameterTypes, Object[] args)
at MyProject.MyType_Accessor.Foo()
at MyUnitTests.MyTypeTests.TestFoo() in c:\...\ MyTypeTests.cs:line 513
编辑


也许这将是一个好主意,向我们提供一些实际的代码,而不仅仅是错误消息。如果该方法引发此错误,则您尝试访问的内容超出范围,就像您尝试访问具有不存在索引的数组成员一样。我们不擅长调试无法看到的代码。希望仅仅发布测试方法就足够了-哦,当您发布代码时,请添加一条注释,指出第513行在较小示例中的位置。添加了代码。我看不出是我的代码导致ArgumentOutOfRangeException。我们已经退出了我的代码,因为引发了预期的异常。每当我的代码在单元测试中导致未处理的异常时,堆栈看起来就大不相同了。处理ExpectedException的代码似乎是罪魁祸首。如果我自己在单元测试中捕捉到异常,即删除ExpectedException属性,结果是相同的。另外,在同一个项目中的另一个类似测试,我肯定以前做过,现在也抛出ArgumentOutOfRangeException。您的测试方法似乎抛出了另一种类型的异常,而不是预期的异常。为什么你不认为测试失败?@沙利亚索斯,我的代码哪里去了?我的测试的最后一行是myType.Foo,它按预期抛出ValidationException。myType.Foo在哪里引发另一个异常?
public class MyType
{
    private void Foo()
    {
         ...

        if (DateTime.Now < _date)
        {
            throw new ValidationException();
        }
    }
}
[TestClass]
public class MyTypeTests
{
    [TestMethod]
    [ExpectedException(typeof(ValidationException))]
    public void TestFoo()
    {
        MyType_Accessor mytype = new MyType_Accessor();
        mytype.Foo();   // This is line 513.
    }
}