gpt4 book ai didi

java - Liferay 中的 JUnit 和模拟

转载 作者:搜寻专家 更新时间:2023-10-30 21:32:42 24 4
gpt4 key购买 nike

我需要使用 Mockito 或 PowerMock 或其他工具进行 JUnit 测试,但我不知道从什么开始。我创建了测试文件夹,设置了 mockito,但接下来我应该做什么?我找不到任何示例,所以我坚持使用它。你能告诉我如何编写这个 JUnit 测试或者至少给出一些想法吗。

public void deleteAuthor(ActionRequest actionRequest, ActionResponse actionResponse)
throws SystemException, PortalException {
long authorId = ParamUtil.getLong(actionRequest, "authorId");
AuthorLocalServiceUtil.deleteAuthor(authorId);
SessionMessages.add(actionRequest, "deleted-author");
log.info(DELETE_SUCCESS);

}

或者这个:

public void addAuthor(ActionRequest actionRequest, ActionResponse actionResponse) 
throws IOException, PortletException, SystemException {

String authorName=ParamUtil.getString(actionRequest,"authorName");
Author author=AuthorLocalServiceUtil.createAuthor(CounterLocalServiceUtil.increment());
author.setAuthorName(authorName);
author=AuthorLocalServiceUtil.addAuthor(author);
}

附言我是新手,一生中只做过 1 次 JUnit 测试,所以我真的很想听听好的建议。提前致谢!


更新:

我尝试这样做:

private BookAndAuthor portlet;

@Before
public void setUp() {
portlet = new BookAndAuthor();
}


@Test
public void testDeleteBookOk() throws Exception {
PowerMockito.mockStatic(BookLocalServiceUtil.class);
long id = 1;
Book book = BookLocalServiceUtil.createBook(id);

ActionRequest actionRequest = mock(ActionRequest.class);
ActionResponse actionResponse = mock(ActionResponse.class);

when(BookLocalServiceUtil.deleteBook(book)).thenReturn(null);
Book result = BookLocalServiceUtil.deleteBook(book);
assertEquals(result, null);
}

...但没有成功。

最佳答案

我们正在使用以下设置运行 JUnit 测试:

i. 在您的 portlet 中的 docroot 旁边创建 test 文件夹。

ii. 添加 unit 文件夹以在其中测试和创建您的 package

iii. 使用以下配置在您的 test 文件夹中创建 portal-ext.properties 文件:

jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.url=jdbc:mysql://localhost:3309/db_name?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
jdbc.default.username=your_username
jdbc.default.password=your_password

jdbc.default.automaticTestTable=C3P0TestTable
jdbc.default.idleConnectionTestPeriod=36000
jdbc.default.maxIdleTime=1200

iv. 创建一个套件类(比如 AbcSuite.java)如下:

package x.x.x;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

import com.liferay.portal.util.InitUtil;

@RunWith(Suite.class)
@Suite.SuiteClasses({
// Where AxTest.class would be your test class name
A1Test.class, A2Test.class, AxTest.class
})

public class AbcSuite {

@BeforeClass
public static void setUp() throws Exception {
// Loading properties and establishing connection with database
InitUtil.initWithSpring();
System.out.println("X Portlet's Test Suite Execution : Started.");
}

@AfterClass
public static void tearDown() {
System.out.println("X Portlet's Test Suite Execution : Completed.");
}
}

v. 创建一个测试类(比如 A1Test.java)如下:

package x.x.x;

import java.util.ArrayList;

import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

public class A1Test {

@BeforeClass
public static void setUp() throws Exception {
System.out.println("Test Running : A1Test");
}

@Test
public void testAddAuthor() {
Author author = AuthorLocalServiceUtil.createAuthor(
CounterLocalServiceUtil.increment());
author.setAuthorName("Testcase Author");
author = AuthorLocalServiceUtil.addAuthor(author);

Assert.assertNotNull(author);
Assert.assertTrue(author.getAuthorId() > 0);
}
}

就是它!您可以使用以下命令一起执行所有测试用例:

ant test -Dtest.class=AbcSuite*

或单独作为:

ant test -Dtest.class=A1Test*

关于java - Liferay 中的 JUnit 和模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39375386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com