2009-08-19 57 views
0

创建测试当我尝试生成以下方法的单元测试(在一个公共静态类)错误而在Visual Studio

private static string[] GetFields(string line, char sep) 
{ 
    char[] totrim = { '"', ' ' }; 
    return line.Split(sep).Select(col => col.Trim(totrim)).ToArray(); 
} 

测试输出说:

While trying to generate your tests, the following errors occurred: 
This method or property cannot be called within an event handler. 

它的工作原理如果我公开该功能 - 我试过手动运行Publicize.exe,它不会抱怨,但也没有任何区别。

回答

0

如果你的功能是私人的,那么它的私人。没有其他程序集,包括您的测试框架,应该能够直接看到它。

您需要将其公开(可能会破坏您的模型),公开包装函数,您明确声明仅用于测试(可滥用),或者您可以使其仅用于单元测试通过添加以下属性(假设你使用C#)到包含GetFields

[assembly:InternalsVisibleTo("[your unit test component name]")] 

The Microsoft website has more information here

+0

你测试这个类的组成部分?据我所知,该声明没有任何区别。私人方法的测试仍然不会生成。但是,我可以更改为内部的,即使没有程序集声明,它也可以工作... – Benjol 2009-08-20 05:36:56

+0

我在猜测您的测试,并在与您正在测试的代码相同的项目/组件中。这应该使内部选项起作用。如果你在外部组件中进行测试,我的代码就可以工作 - 这就是我们目前在我们的项目中有一些测试工作的原因,所以它可以工作 – 2009-08-20 08:27:06