我对这两种方法都很困惑,因为两者都可以做同样的事情,比如下面我的代码片段.
使用assertEquals()
String a = "Hello";
String b = "Hello";
assertEquals(a, b);
Run Code Online (Sandbox Code Playgroud)
使用assertTrue()
assertTrue(a.equals(b));
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这两种方法之间的实际区别?
我很熟悉JUnit,并听取了TestNG的可能是一些JUnit的annoyences的解决方案 - 例如,它坚持以创建每个测试的测试类的一个单独的实例,从而迫使我使用静态字段我想测试之间重用对象.
(让我们说你同意我的观点,这是一个缺点,而不是将这个问题转化为不是这样的问题)
我在这里问的是,与jUnit相比,TestNG有什么缺点?为什么不使用TestNG,假设这是一个新项目并且没有任何迁移成本?
我正在使用Selenium WebDriver,Eclipse,TestNG和Surefire插件.我无法从pom.xml运行testng.xml文件.当我使用mvn test运行pom.xml时,它直接运行src/test/java中的文件.
我的pom.xml代码是
<groupId>angel</groupId>
<artifactId>Angel</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Angel</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
<dependencies>
<!-- Java API to access the Client Driver Protocols -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.21.0</version>
</dependency>
<!-- JExcel API is a java library which provides the ability to read, write, and modify Microsoft Excel spreadsheets.-->
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.10</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<!-- Java API for manipulate the Microsoft Excel Sheets. -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-contrib</artifactId>
<version>3.5-beta5</version>
</dependency>
<!-- Java Mail …Run Code Online (Sandbox Code Playgroud) 我想获得页面加载的异常,但仍然没有结果.我使用implicitlyWait来设置计时器以抛出异常.
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(1, TimeUnit.MILLISECONDS);
driver.get("http://www.rambler.ru");
driver.quit();
Run Code Online (Sandbox Code Playgroud)
有人可以给我更新建议吗?我需要这个以确保页面加载不会是无限的,并且如果加载时间将超过我在计时器中定义的 - >抛出异常作为结果并跳过TC(失败).
谢谢你,Volodymyr
关于Java8 内置功能接口,我遇到过很多问题,包括this,this,this和this.但所有人都在问"为什么只有一种方法?" 或"如果我使用我的功能界面执行X,为什么会出现编译错误"等等.我的问题是:当我在自己的界面中使用lambda时,这些新功能接口的存在目的是什么?
请考虑以下来自oracle文档的示例代码:
// Approach 6: print using a predicate
public static void printPersonsWithPredicate(List<Person> roster,
Predicate<Person> tester) {
for (Person p : roster) {
if (tester.test(p)) {
System.out.println(p);
}
}
}
Run Code Online (Sandbox Code Playgroud)
好的,很好,但这可以用上面的自己的例子来实现(一个单一方法的接口并不新鲜):
// Approach 5:
public static void printPersons(<Person> roster,
CheckPerson tester) {
for (Person p : roster) {
if (tester.test(p)) {
System.out.println(p);
}
}
}
interface CheckPerson {
boolean test(Person p);
}
Run Code Online (Sandbox Code Playgroud)
我可以将lambda传递给两个方法. …
(注:我已经看到关于“Jackson 抱怨无法识别的属性”主题的多个问题的回答,但我没有找到专门使用 RestAssured 的对象映射器的问题)
我有 RestAssured 测试,它有效
@Test
public void objectMappingRelyingOnClassAnnotation() {
User user = RestAssured.get("https://api.github.com/users/andrejss88")
.as(User.class); // must have 'jackson-databind' dependency
Assert.assertEquals(user.login, "andrejss88");
}
Run Code Online (Sandbox Code Playgroud)
它之所以有效,是因为该类已注释,如下所示:
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
public String login;
public int id;
}
Run Code Online (Sandbox Code Playgroud)
但是,我想使用使用重载方法的替代方法as(),并在不使用注释的情况下传入我自己的映射器:
<T> T as(Class<T> cls, ObjectMapper mapper);
Run Code Online (Sandbox Code Playgroud)
但杰克逊的映射器不起作用:
@Test
public void objectMappingUsingSpecifiedMapper() {
// Doesn't compile - Jackson's ObjectMapper != RestAssured's Mapper
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
AnotherUser user = RestAssured.get("https://api.github.com/users/andrejss88")
.as(AnotherUser.class, objectMapper); …Run Code Online (Sandbox Code Playgroud) 我有一个父类型
public class IObject{}
Run Code Online (Sandbox Code Playgroud)
并且可以有很多子类(甚至是未来的新子类)
public class Object1 extends IObject{}
public class Object2 extends IObject{}
public class Object3 extends IObject{}
...
public class ObjectN extends IObject{}
Run Code Online (Sandbox Code Playgroud)
然后根据这些对象的类型我必须做不同的操作。
public class StrategyForObject1(){void do{}}
public class StrategyForObject2(){void do{}}
public class StrategyForObject3(){void do{}}
...
public class StrategyForObjectN(){void do{}}
Run Code Online (Sandbox Code Playgroud)
所以我想从我的 Context 类:
public Conext {
IObject o;
public void setObject(IObject o) {
this.o = o;
}
void logic() {
if (o instanceOf Object1) {
new StrategyForObject1().do();
}
if (o instanceOf Object2) {
new StrategyForObject2().do();
} …Run Code Online (Sandbox Code Playgroud) java design-patterns strategy-pattern visitor-pattern genetic-algorithm