25 Aralık 2011 Pazar
a web 3.0 presentation link
i believe this is a good introduction about web 3.0: http://www.slideshare.net/HatemMahmoud/web-30-the-semantic-web and http://www.slideshare.net/JohannesBhakfi/web30-986081
21 Aralık 2011 Çarşamba
log4j NDC
Here is a link about logging best practices:
http://c2.com/cgi/wiki?LoggingBestPractices
The last rule of thumb:
If you're logging the output of a web service or something like that, make sure you log an item which is unique to the session in each log message. With log4j, you can do this using a NDC. (We didn't use the session id, thats too long, we grabbed a unique integer and put it into the session). This way you can trace whats happening to a single session very easily. You can also log the request parameters as well if you're concerned about that sort of thing
for more about NDC, please see: http://lstierneyltd.com/blog/development/log4j-nested-diagnostic-contexts-ndc/ and http://www.vipan.com/htdocs/log4jhelp.html
for code sample:
public ReturnType method( InputType input) throws ExceptionType{
NDC.push("identifyme"); try { // do something } catch(ExceptionType e) { throw e; } finally { NDC.pop(); }}
NDC javadoc here: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/NDC.html
14 Aralık 2011 Çarşamba
delete log files automatically with log4j
With
I included the file http://wiki.apache.org/logging-log4j/DailyRollingFileAppender in my project.. By the way, since some classes used (such as
RollingFileAppender, there is a maxBackupIndex property which specifies the number of log files that will be kept.. Unfortunately, DailyRollingFileAppender does not support such property. Therefore, to use maxBackupIndex with DailyRollingFileAppender, http://www.codeproject.com/KB/java/CustomDailyRollingFileApp.aspx (and http://wiki.apache.org/logging-log4j/DailyRollingFileAppender) provides a custom DailyRollingFileAppender.I included the file http://wiki.apache.org/logging-log4j/DailyRollingFileAppender in my project.. By the way, since some classes used (such as
org.apache.log4j.RollingCalendar) is not visible outside the package org.apache.log4j, do not try to put the file in another package..
12 Aralık 2011 Pazartesi
mockito code samples
In a previous post, i promised to publish my own mockito code samples.Now, i have time to do that:
package mypackage;
import static org.junit.Assert.*;import static org.mockito.Matchers.anyString;import static org.mockito.Matchers.anyInt;import static org.mockito.Matchers.anyLong;import static org.mockito.Matchers.anyList;import static org.mockito.Matchers.any;import static org.mockito.Mockito.mock;import static org.mockito.Mockito.verify;import static org.mockito.Mockito.when;
// some more imports..public class MyMockitoTest { private MockedClass mocked; private TestedClass tested;
@Before
public void
setup() {
mocked= mock(MockedClass .class);
tested = new TestedClass (mocked);
}
@Test
public void
test1() {
// mocked method returns a new MockedReturnClass instance
when(mocked.test1CallsThis(anyString(), anyLong(), anyInt(), anyList(), any(MyClass.class)).thenReturn(new MockedReturnClass() ));
TestedReturnClass ret = tested.test1(//...test1 parameters);
assertNotNull(ret);
// required assertions
// verify what parameters test1CallsThis actually called with
verify(mocked).test1CallsThis("anyString", 2L, 1, ....);
}
@Test
public void test2() {
// mocked method returns a new, prepared MockedReturnClass instance, when called with THIS_PARAM
when(mocked.test2CallsThis(eq(EnumType.THIS_PARAM) )).thenAnswer(new Answer() {
public MockedReturnClass answer(InvocationOnMock invocation) throws Throwable {
MockedReturnClass retClass = new MockedReturnClass();
// prepare return data
return retClass ;
}
});
// mocked method returns a new MockedReturnClass instance, when called with THAT_PARAM
when(mocked.test2CallsThis(eq(EnumType.THAT_PARAM) )).thenReturn(new MockedReturnClass() ));
TestedReturnClass ret = tested.test2(//...test2 parameters);
assertNotNull(ret);
// required assertions
// verify both calls
verify(mocked).test2CallsThis(EnumType.THIS_PARAM);
verify(mocked).test2CallsThis(EnumType.THAT_PARAM);
}
@Test
public void test3() {
when(mocked.test3CallsThis(any(CapturedClass.class)).thenReturn(new MockedReturnClass() ));
TestedReturnClass ret = tested.test3(//...test3 parameters);
ArgumentCaptor captor = ArgumentCaptor.forClass(CapturedClass.class);
assertNotNull(ret);
// required assertions
//capture CapturedClass here
verify(mocked).test3CallsThis(captor.capture());
// and do required assertions
assertNotNull(captor.getValue());
// ... more assertions
}
@Test
public void test4() {
try {
// mocked method throws MockedException (return type of test4CallsThis is non-void )
when(mocked.test4CallsThis(anyString()).thenThrow(new MockedException() );
tested.test4(//...test4 parameters);
verify(mocked).test4CallsThis("anyString");
catch(MockedException ex) {
// ... do required assertions
}
@Test
public void test5() {
try {
// mocked method throws MockedException (return type of test5CallsThisTwiceis void)
doThrow(new MockedException()).when(mocked.test5CallsThisTwice(anyString());
tested.test5(//...test5 parameters);
verify(mocked, times(2)).test5CallsThisTwice("anyString");
catch(MockedException ex) {
// ... do required assertions
}
}
Kaydol:
Yorumlar (Atom)