1、代码结构中Dao,Service,Controller,Util,Model是什么意思,为什么划分?
web:主要是客户端网页,是表层的东西,可接收和返回数据给用户
domain:主控制层,是用户与数据库交互的核心中转站,控制用户数据收集,控制请求转向
service:业务逻辑层,处理数据逻辑,验证数据,
dao:持久层,读写数据库。
web发出请求---domain接收控制数据转向(可以返回也可以进入service)---service验证数据正确性或者是否符合业务要求---dao存入,读出,依次返回。
首先这些名字不是必须的,只是为了统一,一般都这么叫。
工作流程:一个请求发送到action(作用:MVC中的C),action控制它发送到哪个biz处理,如果用到数据库,那么biz在连接dao,然后返回要的数据,最后action在返回响应的页面(比如jsp),因为是面向对象,所以实体domain在中间传递数据。以上为工作流程.
各层意义:action为控制层,MVC中充当C角色,用来分配哪个业务来处理用户请求。
biz业务层,存放好多处理业务的代码,现实中面向接口编程,一般这里定义都是业务接口,通常会有一个biz.impl这个包用来写实现类. 当然针对架构意义实现类不用说。
dao持久层,DB操作都写在这里
ui 用户交互层,通常为页面,例如.jsp,aspx等页面
util功能包,针对本项目工具类
common通用工具包,一般一个公司会有固定的jar,好几个项目通用的,例如远程调用等
domian存放实体,如果用ibatis框架,一般mapping创建在它下面,当然只针对架构mapping也是无意义. 不懂追问即可!
Action类 是[获得Form表单数据,并处理逻辑的类]
DAO(Data Access Object) 是一个接口实现[通过SessionFactory获得操作数据库的会话,并实现一些基本的删除 添加 修改数据,在servlet中更实际化业务操作]
简单点说,dao层基本都是几个固定的增删改查方法,比方说你在用hibernate的时候,数据库发生变化时,就要重新生成相应的dao,所以发你的代码重新写在service里面,dao变化都不会影响你的程序了。
还有,一些做外包的,dao、POJO都是别人生成好的,不允许程序员改动的,所以要处理你自己的业务方法,就重新建立service层,这里的东西是跟你具体的业务有关的。
2、JSONObject和JSONArray区别及基本用法
一、JSONObject和JSONArray的数据表示形式
JSONObject的数据是用 { } 来表示的,
例如: { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业", "content" : null }
而JSONArray,顾名思义是由JSONObject构成的数组,用 [ { } , { } , ...... , { } ] 来表示
例如: [ { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业" } , { "content" : null, "beginTime" : 1398873600000 "endTime" } ] ;
表示了包含2个JSONObject的JSONArray。
可以看到一个很明显的区别,一个最外面用的是 { } ,一个最外面用的是 [ ] ;
二、如何从字符串String获得JSONObject对象和JSONArray对象
JSONObject jsonObject = new JSONObject ( String str);
JSONArray jsonArray = new JSONArray(String str ) ;
三、如何从JSONArray中获得JSONObject对象
大家可以把JSONArray当成一般的数组来对待,只是获取的数据内数据的方法不一样
JSONObject jsonObject = jsonArray.getJSONObject(i) ;
四、获取JSON内的数据
int mid= jsonObject.getInt ( "id" ) ; // 这里的mid得到的数据就是123.
String mcourse=jsonObject.getString( " courseID") ; // 这里的mcourse得到的数据就是huangt-test.
五、json数组在java中得到某列的值
public static void jsonToBean(String data) {
try {
JSONArray array = new JSONArray(data);//将json字符串转成json数组
for (int i = 0; i < array.length(); i++) {//循环json数组
JSONObject ob = (JSONObject) array.get(i);//得到json对象
String name= ob.getString("name");//name这里是列名称,获取json对象中列名为name的值
System.out.print(name);//输出name
} catch (JSONException e) {
}
}
3、TestNG断言
1、原理:对测试程序变量的中间状态进行断言(Assert)判断,从而辅助判断测试用例的执行是成功还是失败。
2、TestNG中常用的断言方法有:
(1) assertTrue:判断是否为True。
(2) assertFalse:判断是否为false。
(3) assertSame:判断引用地址是否相同。
(4) assertNotSame:判断引用地址是否不相同。
(5) assertNull:判断是否为null。
(6) assertNotNull:判断是否不为null。
(7) assertEquals:判断是否相等,Object类型的对象需要实现haseCode及equals方法。
(8) assertNotEquals:判断是否不相等。
(9) assertEqualsNoOrder:判断忽略顺序是否相等。
3、下面使用WebDriver测试实例体现断言的使用方法。测试用例:
(1) 打开Firefox浏览器,访问sogou首页。
(2) 查找首页上的输入框元素。
(3) 断言输入框是否存在。
(4) 输入搜索关键字,点击搜索按钮。
例子:
package cn.testng;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class AssertTest {
public WebDriver driver;
String baseUrl="http://www.sogou.com";//设定访问网站的地址
@Test
public void testSearch() {
//打开sogou首页
driver.get(baseUrl+"/");
WebElement inputBox=driver.findElement(By.id("query"));
/*使用Assert类的assertTrue方法断言搜索输入框是否在页面显示
* isDisplayed方法根据页面元素的显示状态返回判断值,在页面显示则返回true,不显示则返回false
*/
Assert.assertTrue(inputBox.isDisplayed());
inputBox.sendKeys("自动化测试");
//点击搜索按钮
driver.findElement(By.id("stb")).click();
}
@BeforeMethod
public void beforeMethod() {
//若无法打开Firefox浏览器,可设定Firefox浏览器的安装路径
System.setProperty("webdriver.firefox.bin", "D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
//打开Firefox浏览器
driver=new FirefoxDriver();
}
@AfterMethod
public void afterMethod() {
//关闭打开的浏览器
driver.quit();
}
}
测试结果:
[TestNG] Running:
C:\Windows\Temp\testng-eclipse--542429537\testng-customsuite.xml
PASSED: testSearch
===============================================
Default test
Tests run: 1, Failures: 0, Skips: 0
===============================================