我已经创建了一个自定义属性调试它意识到它被调用了很多次,即使我只运行一次测试。似乎它被称为所有测试的属性:
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class |
AttributeTargets.Interface | AttributeTargets.Assembly,
AllowMultiple = true)]
public class DisplayModeAttribute : Attribute, ITestAction
{
private readonly string screenSize;
public DisplayModeAttribute(string screenSize)
{
this.screenSize = screenSize;
}
public void BeforeTest(TestDetails details)
{
PageFactory.SetWindowSize(screenSize);
}
public void AfterTest(TestDetails details)
{
}
public ActionTargets Targets
{
get { return ActionTargets.Test | ActionTargets.Suite; }
}
}
我有三个测试使用此属性,其中xsmall值较小,为
[DisplayMode("small")]
当我调试测试时,我注意到属性构造函数被调用所有值(小,大,xsmall)多次(大约40!)。对于最后的调用,它使用正确的值设置值,例如" small"
检查调用堆栈我看不到它被谁调用。
答案 0 :(得分:1)
我不知道这个属性的细节,但看起来每个测试调用都要运行一次属性。如果是这种情况,那么实例化计数为40并不会听起来太不合理。
C#中的属性是面向方面编程的实现,这听起来是个好主意,但很快就会变得难以理解并且难以测试。
我建议不要使用属性,而是在测试设置中使用简单的方法调用,尽管不是"很酷"当他们来阅读测试套件时,对其他开发人员来说会更容易理解。
如果您真的坚持使用属性,请尝试更改
get { return ActionTargets.Test | ActionTargets.Suite; }
是
get { return ActionTargets.Suite; }