spring boot 单元测试是确保代码质量的重要部分,它允许我们在不实际启动整个应用的情况下测试我们的代码。在spring boot中,我们通常使用spring test模块和junit测试框架来编写单元测试。以下是一个简单的spring boot单元测试的详细代码介绍:
首先,假设我们有一个简单的userservice,它有一个finduserbyid方法:
@service
public class userservice {
    @autowired
    private userrepository userrepository;
    public user finduserbyid(long id) {
        return userrepository.findbyid(id).orelse(null);
    }
}
 
接下来,我们将为userservice编写单元测试:
import org.junit.jupiter.api.beforeeach;
import org.junit.jupiter.api.test;
import org.junit.jupiter.api.extension.extendwith;
import org.mockito.injectmocks;
import org.mockito.mock;
import org.mockito.junit.jupiter.mockitoextension;
import org.springframework.boot.test.context.springboottest;
import java.util.optional;
import static org.mockito.mockito.*;
import static org.junit.jupiter.api.assertions.*;
@extendwith(mockitoextension.class)
@springboottest
public class userservicetest {
    @mock
    private userrepository userrepository;
    @injectmocks
    private userservice userservice;
    private user user;
    @beforeeach
    void setup() {
        user = new user();
        user.setid(1l);
        user.setname("test user");
    }
    @test
    void finduserbyid_userexists_returnsuser() {
        // arrange
        when(userrepository.findbyid(1l)).thenreturn(optional.of(user));
        // act
        user founduser = userservice.finduserbyid(1l);
        // assert
        assertnotnull(founduser);
        assertequals(user.getid(), founduser.getid());
        assertequals(user.getname(), founduser.getname());
        verify(userrepository).findbyid(1l);
    }
    @test
    void finduserbyid_userdoesnotexist_returnsnull() {
        // arrange
        when(userrepository.findbyid(2l)).thenreturn(optional.empty());
        // act
        user founduser = userservice.finduserbyid(2l);
        // assert
        assertnull(founduser);
        verify(userrepository).findbyid(2l);
    }
}
 
在上面的代码中,我们使用了mockito库来模拟userrepository的行为。@mock注解用于创建userrepository的模拟对象,而@injectmocks注解则用于创建userservice的实例,并将模拟的userrepository注入到其中。
在setup方法中,我们创建了一个user对象,用于后续的测试。
我们编写了两个测试用例:finduserbyid_userexists_returnsuser和finduserbyid_userdoesnotexist_returnsnull。在每个测试用例中,我们首先使用when方法来定义模拟的userrepository的行为。然后,我们调用userservice.finduserbyid方法来执行实际的测试。最后,我们使用断言来验证测试的结果是否符合预期。
注意,我们使用verify方法来验证userrepository的findbyid方法是否被调用。这是一个好的实践,因为它可以确保我们的代码确实与模拟的对象进行了交互。
总的来说,spring boot的单元测试可以帮助我们确保代码的正确性,并在代码更改时提供及时的反馈。通过编写详细的测试用例,我们可以确保应用的各个部分都能正常工作,从而提高应用的质量和可靠性。
            
                                            
                                            
                                            
                                            
                                            
发表评论