My question is: I am new to Spock testing, and am trying to get 100% code coverage on this User Class. To get me started, can someone help me figure out how to test the constructor. What I currently have is not covering it using the cobertura plugin. Also, if someone is knowledgeable about Spock + Cobertura, maybe you could shed some light on what I'm doing wrong, and some pointers for further testing.
I have a class that represents a user:
import java.io.Serializable;
import java.util.Set;
class User implements Serializable {
String email
byte[] photo
static hasMany = [lineups: Lineup]
private static final long serialVersionUID = 1
transient springSecurityService
String username
String password
boolean enabled = true
boolean accountExpired
boolean accountLocked
boolean passwordExpired
User(String username, String password) {
this()
this.username = username
this.password = password
}
@Override
int hashCode() {
username?.hashCode() ?: 0
}
@Override
boolean equals(other) {
is(other) || (other instanceof User && other.username == username)
}
Set<SecRole> getAuthorities() {
SecUserSecRole.findAllBySecUser(this)*.secRole
}
def beforeInsert() {
encodePassword()
}
def beforeUpdate() {
if (isDirty('password')) {
encodePassword()
}
}
protected void encodePassword() {
password = springSecurityService?.passwordEncoder ? springSecurityService.encodePassword(password) : password
}
static transients = ['springSecurityService']
static constraints = {
username blank: false, unique: true
password blank: false
email(unique: true, blank: false, nullable: true) // needs to be moved to account
photo(nullable:true, maxSize: 1024 * 1024 * 2 /* 2MB */)
}
static mapping = {
password column: '`password`'
}
String toString() {
return id + ": " + email + " " + username
}
}
Then I have a Spock Unit Test: (not all my code is here, but just for the examples that I'm requesting info on...
@TestFor(User)
class UserSpec extends Specification {
User user
def setup() {
user = new User(
username: "fredflintstone",
password: "Wilma1",
enabled: true).save(failOnError: true, flush: true)
}
def cleanup() {
user = null
}
// Constructor tests
void "test to check constructor works"() {
when:
mockForConstraintsTests(User, [user])
expect:
user.validate()
user != null
user.username != null
user.password != null
}
void "test #hashCode works"() {
setup:
mockForConstraintsTests(User, [user])
expect:
user.username.hashCode() != null
}
}
Aucun commentaire:
Enregistrer un commentaire