我正在嘗試測試遺留Java應用程序,但此時無法重新設置其代碼。我需要做的就是了解它通過JDBC發送什麼SQL請求以及何時發送。我希望將所有這些請求協議爲純文本文件以供將來查看。用於模擬的可編程JDBC驅動程序
我需要開發一個自定義的JDBC驅動程序,這將欺騙應用程序,並像一個正常的驅動程序(將接受請求,返回在一定條件下一些值,失敗等)。一個模擬結構,像往常一樣...
問題是 - 你知道任何現有的框架這項任務?理想情況下,我希望能夠通過XML文件來配置驅動程序的行爲。
我正在嘗試測試遺留Java應用程序,但此時無法重新設置其代碼。我需要做的就是了解它通過JDBC發送什麼SQL請求以及何時發送。我希望將所有這些請求協議爲純文本文件以供將來查看。用於模擬的可編程JDBC驅動程序
我需要開發一個自定義的JDBC驅動程序,這將欺騙應用程序,並像一個正常的驅動程序(將接受請求,返回在一定條件下一些值,失敗等)。一個模擬結構,像往常一樣...
問題是 - 你知道任何現有的框架這項任務?理想情況下,我希望能夠通過XML文件來配置驅動程序的行爲。
p6spy包裝現有的jdbc連接,並允許您看看會發生什麼。
有關說明,請參閱http://www.mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-solution/。
如果你想要做單元測試,而不是一個集成測試,比 你可以使用一個很基本的,簡單的方法,只有使用的Mockito,像這樣:
public class JDBCLowLevelTest {
private TestedClass tested;
private Connection connection;
private static Driver driver;
@BeforeClass
public static void setUpClass() throws Exception {
// (Optional) Print DriverManager logs to system out
DriverManager.setLogWriter(new PrintWriter((System.out)));
// (Optional) Sometimes you need to get rid of a driver (e.g JDBC-ODBC Bridge)
Driver configuredDriver = DriverManager.getDriver("jdbc:odbc:url");
System.out.println("De-registering the configured driver: " + configuredDriver);
DriverManager.deregisterDriver(configuredDriver);
// Register the mocked driver
driver = mock(Driver.class);
System.out.println("Registering the mock driver: " + driver);
DriverManager.registerDriver(driver);
}
@AfterClass
public static void tearDown() throws Exception {
// Let's cleanup the global state
System.out.println("De-registering the mock driver: " + driver);
DriverManager.deregisterDriver(driver);
}
@Before
public void setUp() throws Exception {
// given
tested = new TestedClass();
connection = mock(Connection.class);
given(driver.acceptsURL(anyString())).willReturn(true);
given(driver.connect(anyString(), Matchers.<Properties>any()))
.willReturn(connection);
given(connection.prepareCall(anyString())).willReturn(statement);
}
}
比你可以測試各種不同場景,就像其他任何Mockito測試一樣
@Test
public void shouldHandleDoubleException() throws Exception {
// given
SomeData someData = new SomeData();
given(connection.prepareCall(anyString()))
.willThrow(new SQLException("Prepare call"));
willThrow(new SQLException("Close exception")).given(connection).close();
// when
SomeResponse response = testClass.someMethod(someData);
// then
assertThat(response, is(SOME_ERROR));
}
感謝您的鏈接,看起來很有趣。但是,這並不是我正在尋找的。 P6spy是協議正在發生的工具,而不是更改JDBC驅動程序的行爲。 – yegor256 2011-05-08 20:42:26