Better testing with Mockito.

This commit is contained in:
JesseBrault0709 2023-01-07 18:30:36 -06:00
parent 9d3f3f180b
commit 92515785a0
3 changed files with 54 additions and 14 deletions

View File

@ -31,6 +31,15 @@ dependencies {
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
/**
* Mockito
*/
// https://mvnrepository.com/artifact/org.mockito/mockito-core
testImplementation 'org.mockito:mockito-core:4.11.0'
// https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter
testImplementation 'org.mockito:mockito-junit-jupiter:4.11.0'
/**
* Test Logging
*/

View File

@ -1,16 +1,23 @@
package com.jessebrault.ssg.specialpage
import com.jessebrault.ssg.part.GspPartRenderer
import com.jessebrault.ssg.part.Part
import com.jessebrault.ssg.part.PartRenderer
import com.jessebrault.ssg.part.PartType
import com.jessebrault.ssg.text.MarkdownFrontMatterGetter
import com.jessebrault.ssg.text.MarkdownTextRenderer
import com.jessebrault.ssg.text.FrontMatterGetter
import com.jessebrault.ssg.text.Text
import com.jessebrault.ssg.text.TextRenderer
import com.jessebrault.ssg.text.TextType
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.mockito.Mock
import org.mockito.junit.jupiter.MockitoExtension
import static org.junit.jupiter.api.Assertions.assertEquals
import static org.mockito.ArgumentMatchers.any
import static org.mockito.ArgumentMatchers.argThat
import static org.mockito.Mockito.when
@ExtendWith(MockitoExtension)
class GspSpecialPageRendererTests {
private final SpecialPageRenderer renderer = new GspSpecialPageRenderer()
@ -23,22 +30,31 @@ class GspSpecialPageRendererTests {
}
@Test
void rendersPartWithNoBinding() {
def part = new Part('test', new PartType(['.gsp'], new GspPartRenderer()), 'Hello, World!')
void rendersPartWithNoBinding(@Mock PartRenderer partRenderer) {
when(partRenderer.render(any(), any(), any())).thenReturn('Hello, World!')
def partType = new PartType([], partRenderer)
def part = new Part('test', partType , '')
def r = this.renderer.render("<%= parts['test'].render() %>", [], [part], [:])
assertEquals('Hello, World!', r)
}
@Test
void rendersPartWithBinding() {
def part = new Part('test', new PartType(['.gsp'], new GspPartRenderer()), "<%= binding['greeting'] %>")
void rendersPartWithBinding(@Mock PartRenderer partRenderer) {
when(partRenderer.render(any(), argThat { Map m -> m.get('greeting') == 'Hello, World!'}, any())).thenReturn('Hello, World!')
def partType = new PartType([], partRenderer)
def part = new Part('test', partType, '')
def r = this.renderer.render("<%= parts['test'].render([greeting: 'Hello, World!'])", [], [part], [:])
assertEquals('Hello, World!', r)
}
@Test
void rendersText() {
def text = new Text('**Hello, World!**', 'test', new TextType(['.gsp'], new MarkdownTextRenderer(), new MarkdownFrontMatterGetter()))
void rendersText(@Mock TextRenderer textRenderer, @Mock FrontMatterGetter frontMatterGetter) {
when(textRenderer.render(any(), any())).thenReturn('<p><strong>Hello, World!</strong></p>\n')
def textType = new TextType([], textRenderer, frontMatterGetter)
def text = new Text('', 'test', textType)
def r = this.renderer.render("<%= texts.find { it.path == 'test' }.render() %>", [text], [], [:])
assertEquals('<p><strong>Hello, World!</strong></p>\n', r)
}

View File

@ -1,37 +1,52 @@
package com.jessebrault.ssg.template
import com.jessebrault.ssg.part.GspPartRenderer
import com.jessebrault.ssg.part.Part
import com.jessebrault.ssg.part.PartRenderer
import com.jessebrault.ssg.part.PartType
import com.jessebrault.ssg.text.FrontMatter
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.mockito.Mock
import org.mockito.junit.jupiter.MockitoExtension
import static org.junit.jupiter.api.Assertions.assertEquals
import static org.mockito.ArgumentMatchers.any
import static org.mockito.ArgumentMatchers.argThat
import static org.mockito.Mockito.when
@ExtendWith(MockitoExtension)
class GspTemplateRendererTests {
private final TemplateRenderer renderer = new GspTemplateRenderer()
@Test
void rendersPartWithNoBinding() {
void rendersPartWithNoBinding(@Mock PartRenderer partRenderer) {
def template = new Template(
"<%= parts['test'].render() %>",
null,
null
)
def part = new Part('test', new PartType(['.gsp'], new GspPartRenderer()), 'Hello, World!')
when(partRenderer.render(any(), any(), any())).thenReturn('Hello, World!')
def partType = new PartType([], partRenderer)
def part = new Part('test', partType, null)
def r = this.renderer.render(template, new FrontMatter([:]), '', [part], [:])
assertEquals('Hello, World!', r)
}
@Test
void rendersPartWithBinding() {
void rendersPartWithBinding(@Mock PartRenderer partRenderer) {
def template = new Template(
"<%= parts['greeting'].render([person: 'World']) %>",
null,
null
)
def part = new Part('greeting', new PartType(['.gsp'], new GspPartRenderer()), 'Hello, $binding.person!')
when(partRenderer.render(any(), argThat { Map m -> m.get('person') == 'World' }, any())).thenReturn('Hello, World!')
def partType = new PartType([], partRenderer)
def part = new Part('greeting', partType, null)
def r = this.renderer.render(template, new FrontMatter([:]), '', [part], [:])
assertEquals('Hello, World!', r)
}