Run Test of a Method Call
You can also test individual functions you have created in your logic or in the groovy library.
Assume there is a library logic that has RoundingUtils element with a method that rounds the value to the desired count of decimal places:
import java.math.RoundingMode
BigDecimal round(BigDecimal number, int decimalPlaces) {
if (number == null) {
return null
}
return number.setScale(decimalPlaces, RoundingMode.ROUND_HALF_UP)
}
Create a unit test from in logic editor in Studio to get the template.
When testing method calls, delete the condition for evaluation of the element result:
testRun.execute().getElementTestResult() != null
In our example we want to evaluate this condition instead:
script.round(10.449, 0) == 10
If your method from your unit test example does not call any Pricefx API, you can always remove the line that fakes the api
variable:
.withLogicTestDouble("api", [:])
.
package MyLibrary
import net.pricefx.tdd4c.TestRun
import spock.lang.Specification
class RoundingUtilsTest extends Specification {
def LOGIC_DIR = "MyLibrary+2020-01-01"
def ELEMENT_NAME = "RoundingUtils"
def "base rounding"() {
when:
TestRun testRun = TestRun.builder()
.buildElementTest(LOGIC_DIR, ELEMENT_NAME)
and:
Script script = testRun.getElementScript()
then:
script.round(10.449, 0) == 10
}
}
Run the test using the test icon next to the test name.
Â
Now we want to repeat the same unit test but for multiple inputs. Spock offers a nice feature Data tables that allows to put input and expected output values in a text table:
package MyLibrary
import net.pricefx.tdd4c.TestRun
import spock.lang.Specification
class RoundingUtilsTest extends Specification {
def LOGIC_DIR = "MyLibrary+2020-01-01"
def ELEMENT_NAME = "RoundingUtils"
def "base rounding"() {
when:
TestRun testRun = TestRun.builder()
.buildElementTest(LOGIC_DIR, ELEMENT_NAME)
and:
Script script = testRun.getElementScript()
then:
script.round(price, dp) == rounded
where:
price | dp || rounded
10.449 | 0 || 10
10.678 | 0 || 11
2.15 | 0 || 2
2.95 | 0 || 3
3.00 | 0 || 3
0 | 0 || 0
null | 0 || null
10.47449 | 3 || 10.474
10.47678 | 3 || 10.477
2.125 | 3 || 2.125
3.000 | 3 || 3.000
0 | 3 || 0
null | 3 || null
}
}
Run the test using the test icon next to the test name.
Found an issue in documentation? Write to us.
Â