2021-07-22 学习@JUnit4|@RunWith
关于Junit4
在Junit4中,一个POJO类就是一个测试类,测试方法通过@Test来标识,初始化方法通过@Before来标识,释放资源的方法通过@After来标识。
JUnit4注解解释
- @Test : 测试方法,测试程序会运行的方法,后边可以跟参数代表不同的测试,如(expected=XXException.class)
异常测试,(timeout=xxx)超时测试- @Ignore : 被忽略的测试方法
- @Before: 每一个测试方法之前运行
- @After : 每一个测试方法之后运行
- @BeforeClass: 所有测试开始之前运行
- @AfterClass: 所有测试结束之后运行
- @Ignore:暂不执行该测试方法
JUnit4使用说明
> 创建一个和src同级别的文件夹叫test(逻辑代码放src里,测试代码放test里是个好习惯)。 接着在IntelliJ
> IDEA里还要把这个test文件夹要设置成测试文件的根目录,右键选中 Mark Directory As - Test Sources
>
>前一个@TEST不会影响下一个@TEST
>
JUnit4 的两个属性
except
public int factorial(int n) throws Exception {
if (n < 0) {
throw new Exception("负数没有阶乘");
} else if (n <= 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
@Test(expected = Exception.class)
public void testFactorialException() throws Exception {
new Math().factorial(-1);
fail("factorial参数为负数没有抛出异常");
}
(expected = Exception.class)和 fail(“factorial参数为负数没有抛出异常”);之间的配合
这个测试方法会检查是否抛出Exception异常(也可以检测是否抛出其它异常),如果抛出了异常那么测试通过(预期就是传进负数会抛出异常)。没有抛出异常则测试不通过执行fail(“factorial参数为负数没有抛出异常”);
timeout
timeout属性,这个是用来测试性能的,就是测试一个方法能不能在规定时间内完成。
关于@RunWith
关于Assert函数的理解
https://www.runoob.com/w3cnote/c-assert.html
我一直以为 assert 仅仅是个报错函数,事实上,它居然是个宏,并且作用并非"报错"。
在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert() 的用法像是一种"契约式编程",在我的理解中,其表达的意思就是,程序在我的假设条件下,能够正常良好的运作,其实就相当于一个 if 语句:
使用 assert 的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。
在调试结束后,可以通过在包含 #include 的语句之前插入 #define NDEBUG 来禁用 assert 调用
Spark Session替代SparkConf
在2.0版本之前,使用Spark必须先创建SparkConf和SparkContext
//set up the spark configuration and create contexts
val sparkConf = new SparkConf().setAppName("SparkSessionZipsExample").setMaster("local")
// your handle to SparkContext to access other context like SQLContext
val sc = new SparkContext(sparkConf).set("spark.some.config.option", "some-value")
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
在Spark2.0中只要创建一个SparkSession就够了,SparkConf、SparkContext和SQLContext都已经被封装在SparkSession当中。下面的代码创建了一个SparkSession对象并设置了一些参数。这里使用了生成器模式,只有此“spark”对象不存在时才会创建一个新对象。
// Create a SparkSession. No need to create SparkContext
// You automatically get it as part of the SparkSession
val warehouseLocation = "file:${system:user.dir}/spark-warehouse"
val spark = SparkSession
.builder()
.appName("SparkSessionZipsExample")
.config("spark.sql.warehouse.dir", warehouseLocation)
.enableHiveSupport()
.getOrCreate()