我编写了一个方法,它接收一个可调用的字符串和一个任意长度的字符串数组,我使用这些字符串来确定可调用的执行时间,然后将结果写入数据库:
public static <T> T logTimes(Callable<T> callable, String actionToTest, String... testData) throws Exception {
LocalDateTime before = null;
T call = null;
try {
before = LocalDateTime.now();
call = callable.call();
logToDocument(before, LocalDateTime.now(), actionToTest, testData);
} catch (TimeoutException ex) {
logToDocument(before, LocalDateTime.now(), actionToTest, testData);
}
return call;
}
这很好,但是我现在遇到了一种情况,我需要将Callable的返回值作为参数传递给相同的方法:
public static String loadedPageName(WebDriver driver, int seconds) throws Exception {
String originPage = pageName(driver);
By loadingBar = By.xpath("//div[contains(@class, 'progress')]");
WebDriverWait w = new WebDriverWait(driver, seconds);
Function<WebDriver, Boolean> pageFinishedLoading = wd -> wd.findElements(loadingBar).size() == 0;
AtomicReference<String> dest = new AtomicReference<>();
try {
return ExtentTestManager.logTimes(()-> {
w.until(ExpectedConditions.presenceOfAllElementsLocatedBy(loadingBar));
w.until(pageFinishedLoading);
dest.set(driver.findElement(By.tagName("body")).getAttribute("page-name"));
return dest;
}, REDIRECT, ORIGIN, originPage, DESTINATION, dest.get()).get();
} catch (TimeoutException ex) {
ExtentTestManager.reporterLog("Timeout after waiting ".concat(String.valueOf(seconds)).concat(" seconds for a page to load"));
ExtentTestManager.logToDocument(LocalDateTime.now(), seconds, REDIRECT, ORIGIN, originPage, DESTINATION, "timeout");
return null;
}
}
此方法一直等待,直到加载页并返回加载页的名称。我希望在ExtentTestManager.logtimes(callable
调用中使用该返回值作为参数,而callable
是其参数之一。
现在,loadedPagename(WebDriver driver,int seconds)
按预期返回页名,但logtimes
将null
写入数据库,以获得callable
的结果。
有没有办法做到这一点?
您在日志中的代码等效于:
try {
before = LocalDateTime.now();
call = callable.call();
} catch (TimeoutException ex) {
// do nothing with the exception
}
logToDocument(before, LocalDateTime.now(), actionToTest, testData);
也许您想用TimeoutException做点什么?另外,loadedPageName中的调用代码将永远不会遇到TimeoutException,因为它已经在日志中被捕获(并被忽略)。
Edit:您声明“logtimes将null写入数据库,以获得可调用的结果。”我不明白,logTimes不是在任何地方写可调用的结果,而是只返回它。
AtomicReference<String> dest = new AtomicReference<>();
try {
return ExtentTestManager.logTimes(()-> {
w.until(ExpectedConditions.presenceOfAllElementsLocatedBy(loadingBar));
w.until(pageFinishedLoading);
dest.set(driver.findElement(By.tagName("body")).getAttribute("page-name"));
return dest.get();
}, REDIRECT, ORIGIN, originPage, DESTINATION, dest.get());
public static <T> T logTimes(Callable<T> callable, String actionToTest, String... testData) throws Exception {
LocalDateTime before = LocalDateTime.now();
T call = callable.call();
List<String> allTestData = new ArrayList<String>(Arrays.asList(testData));
allTestData.add(String.valueOf(call));
logToDocument(before, LocalDateTime.now(), actionToTest, allTestData.toArray(new String[0]));
return call;
}
我有静态方法在我的类 这就是定义 这里用的是 这是我得到的一个错误 E0167类型为“void(TV_DepthCamAgent::)(int count,int copied_file)”的参数与类型为“void()(int,int)”的参数不兼容 错误C3867“TV_DepthCamAgent::progress_callback”:非标准语法;使用' 我做错了什么?
本文向大家介绍shell传参并将参数传递给sql文件的方法,包括了shell传参并将参数传递给sql文件的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 调用代码: sh /tmp/t.sh 20160808 以上这篇shell传参并将参数传递给sql文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
问题内容: 我很好奇Go中是否有可能。我有多种方法的类型。是否可以有一个函数,该函数需要一个方法参数,然后将其称为类型? 这是我想要的一个小例子: Go认为type 有一个称为的方法,而不是用传入的方法名称替换它。 问题答案: 是的,有可能。您有2(3)个选项: 规范:方法表达式 该表达式产生的功能与第一个参数等效,但具有一个显式接收器。它有签名。 在这里,方法接收器是显式的。您只需将方法名称(具
我有一个用例,其中一个类存在于一个包的两个版本中。 到目前为止还不错(我相信)。 然后我有一个使用该类的应用程序,为了避免为不同的包版本重写应用程序,我想传递应该使用的类(即感兴趣的包)作为应用程序的参数。所以像这样的东西 我相信我可以把这个叫做如果我在构造函数中传递的实例,那么我会通过实例对象调用静态方法,不是吗? 另一方面,在上面的示例中,是一个类对象,因此我不能像上面那样调用静态方法。 这是
我有办法 我想知道如果它真的创建了用户,我是否可以对其进行单元测试。但是它没有参数。 我尝试了以下方法: 然而,这实际上让我通过了与扫描仪的争论,这显然是我在测试中无法做到的。还尝试了其他逻辑。我也尝试过使用when(),,,但我找不到解决这个问题的方法,因为我对模仿还比较陌生。 有人能和我分享一些想法吗?
我正在编写一个方法,如果我想将一个类传递给一个方法,其中代码的一部分包括检查对象是否属于某种类型。这就是我想要的(但显然不行): 关于如何做到这一点有什么提示吗?谢谢!