Integration with JUnit
Sniffy comes with a JUnit @Rule for quick integration with test framework.
Just add @Rule public final SniffyRule sniffyRule = new SniffyRule(); to your JUnit test class and place appropriate expectations on your test methods like shown below.
package io.sniffy.test.junit.usage;
import io.sniffy.socket.DisableSockets;
import io.sniffy.sql.SqlExpectation;
import io.sniffy.test.Count;
import io.sniffy.test.junit.SniffyRule;
import org.junit.Rule;
import org.junit.Test;
import java.io.IOException;
import java.net.ConnectException;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
public class JUnitUsageTest {
@Rule
public final SniffyRule sniffyRule = new SniffyRule(); // (1)
@Test
@SqlExpectation(count = @Count(1)) // (2)
public void testJUnitIntegration() throws SQLException {
final Connection connection = DriverManager.getConnection("sniffy:jdbc:h2:mem:", "sa", "sa"); // (3)
connection.createStatement().execute("SELECT 1 FROM DUAL"); // (4)
}
@Test
@DisableSockets // (5)
public void testDisableSockets() throws IOException {
try {
new Socket("google.com", 22); // (6)
fail("Sniffy should have thrown ConnectException");
} catch (ConnectException e) {
assertNotNull(e);
}
}
}
-
- Integrate Sniffy to your test using @Rule annotation and a SniffyRule field.
-
- Now just add
@SqlExpectationannotation to define number of queries allowed for given method. -
- Just add
sniffy:in front of your JDBC connection URL in order to enable sniffer. -
- Do not make any changes in your code - just add the
@Rule SniffyRuleand put annotations on your test method. -
- Add
@DisableSocketsannotation on your test method or test class and any attempt to open a network connection will fail -
- All socket operations executed within test method annotated with
@DisableSocketswill throw ajava.net.ConnectException
You can enable more verbose logging by using a SniffyRule constructor which takes io.sniffy.log.PolyglogLevel enum value for logging customization.
By default, Sniffy logs output to system output stream, but it might change in future releases.
JUnit Runner
Sniffy comes with a JUnit runner class SniffyRunner which can be used for eagerly initializing Sniffy.
It might be useful in certain conditions such as testing custom security providers installed in runtime.
You don’t have to use in the majority of use cases.
@RunWith(SniffyRunner.class)