gpt4 book ai didi

c# - 创建一个简单的 C# 包装器来清理代码

转载 作者:太空狗 更新时间:2023-10-30 00:22:00 26 4
gpt4 key购买 nike

我有这个代码:

public void Contacts(string domainToBeTested, string[] browserList, string timeOut, int numberOfBrowsers)
{
verificationErrors = new StringBuilder();

for (int i = 0; i < numberOfBrowsers; i++)
{
ISelenium selenium = new DefaultSelenium("LMTS10", 4444, browserList[i], domainToBeTested);

try
{
selenium.Start();
selenium.Open(domainToBeTested);

selenium.Click("link=Email");
Assert.IsTrue(selenium.IsElementPresent("//div[@id='tabs-2']/p/a/strong"));

selenium.Click("link=Address");
Assert.IsTrue(selenium.IsElementPresent("//div[@id='tabs-3']/p/strong"));

selenium.Click("link=Telephone");
Assert.IsTrue(selenium.IsElementPresent("//div[@id='tabs-1']/ul/li/strong"));
}
catch (AssertionException e)
{
verificationErrors.AppendLine(browserList[i] + " :: " + e.Message);
}
finally
{
selenium.Stop();
}
}
Assert.AreEqual("", verificationErrors.ToString(), verificationErrors.ToString());
}

我的问题是我想这样做,以便我可以在其余代码中多次使用围绕“try”的代码。我认为这与包装器有关,但我无法从网上得到简单的答案。

所以简单来说,这段代码唯一改变的部分是 try {} 之间的位,其余部分是标准代码,我目前使用了 100 多次,结果证明维护起来很痛苦。

希望这很清楚,非常感谢。

最佳答案

两个明显且有些等同的建议:

  • 使用委托(delegate)来表示 try block 中的代码(例如 Action<ISelenium>)
  • 使用接口(interface)来表示 try block 中的代码

改变main方法接受一个委托(delegate)(或接口(interface))类型的参数,并在try block 中执行:

public void Contacts(string domainToBeTested, string[] browserList, 
string timeOut, int numberOfBrowsers,
Action<ISelenium> test)
{
verificationErrors = new StringBuilder();

for (int i = 0; i < numberOfBrowsers; i++)
{
ISelenium selenium = new DefaultSelenium
("LMTS10", 4444, browserList[i], domainToBeTested);

try
{
test(selenium);
}
catch (AssertionException e)
{
verificationErrors.AppendLine(browserList[i] + " :: " + e.Message);
}
finally
{
selenium.Stop();
}
}
Assert.AreEqual("", verificationErrors.ToString(),
verificationErrors.ToString());
}

无论哪种方式,您都将更改的位与未更改的位分开。我可能会选择委托(delegate)形式,尤其是当您使用 C# 3 时。您可以将代码放在一个方法中并使用方法组转换,或者对小块使用 lambda 表达式。

关于c# - 创建一个简单的 C# 包装器来清理代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2988715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com