C# 是否可以将属性设置为ExpectedException中的消息?

C# 是否可以将属性设置为ExpectedException中的消息?,c#,unit-testing,expected-exception,C#,Unit Testing,Expected Exception,我正在尝试验证异常和返回的消息,但此消息中的文件名是可变的。用一种方法使用单元测试可以做到这一点吗 public static string FileName { get { return "EXT_RF_ITAUVEST_201605091121212"; } } [TestMethod()] [ExpectedExcepti

我正在尝试验证异常和返回的消息,但此消息中的文件名是可变的。用一种方法使用单元测试可以做到这一点吗

public static string FileName
        {
            get
            {
                return "EXT_RF_ITAUVEST_201605091121212";
            }
        }

        [TestMethod()]
        [ExpectedException(typeof(Exception), String.Format("Error on file {0}", FileName))]
        public void ValidarNomeArquivo_DataNomeIncorreta_Mensagem()
        {
            throw new Exception(String.Format("Error on file {0}", FileName));
        }

上面的代码返回错误“属性参数必须是常量表达式、类型表达式或属性参数类型的数组创建表达式”。

在您的情况下,我不会使用
ExpectedException
,而只是手动执行它所执行的逻辑

    public static string FileName
    {
        get
        {
            return "EXT_RF_ITAUVEST_201605091121212";
        }
    }

    [TestMethod()]
    public void ValidarNomeArquivo_DataNomeIncorreta_Mensagem()
    {
        //This try block must contain the entire function's logic, 
        // nothing can go after it to get the same behavor as ExpectedException.
        try
        {
            throw new Exception(String.Format("Error on file {0}", FileName));

            //This line must be the last line of the try block.
            Assert.Fail("No exception thrown");
        }
        catch(Exception e)
        {
            //This is the "AllowDerivedTypes=false" check. If you had done AllowDerivedTypes=true you can delete this check.
            if(e.GetType() != typeof(Exception))
                throw;

            if(e.Message != String.Format("Error on file {0}", FileName))
                throw;

            //Do nothing here
        }
    }

您拥有的代码正在验证
Exception
是否正确抛出异常。我希望您希望测试/您的/代码,而不是Microsoft的。在这种情况下,文件名将像往常一样从类/方法中抛出。有一个控制台应用程序,它读取数据库,获取文件名和URL服务,然后创建一个实例并调用将文件名作为对象属性传递的方法。我需要抛出异常的原因是控制台应用程序处理该异常以记录和发送电子邮件。但是我正在创建的这个测试方法只是测试一个文件的验证,所以,我认为目前所有的过程都不符合要求。事实上,我必须确保这个测试方法引发一个异常,然后我从Scott Chamberlain处更改了源代码,插入ExpectedException并更改!=向==发送信号,以验证异常类型和返回的消息。非常感谢Scott。我修复了它,所以它现在检查是否总是抛出异常。您只需要在try块的末尾放置一个
Assert.Fail(
)。我是StackOverflow.Tryint的新手,但我认为不允许将代码放在这里。我有一个方法来验证文件名ValidateFileName(IncorrectFileName),而不是抛出新的异常(String.Format(“Error on file{0}”,FileName));在此方法中,我必须在文件名无效的情况下抛出异常。添加Assert.Fail确实可以更正它。再次感谢Scott。编辑您的问题并将代码作为更新放在那里。另一个简短的更改。我将验证类型异常和消息放在一个if中,因为第一次抛出忽略了第二次验证。如果(e.GetType()!=typeof(Exception)和&e.Message!=String.Format(“文件{0}上的错误”,文件名))抛出;