How to use setup method of org.mockito.InjectMocks class

Best Mockito code snippet using org.mockito.InjectMocks.setup

Source:InjectCollectionsOfMocksStory.java Github

copy

Full Screen

...27 * <p>28 * <b>Given</b> an {@link Object} under test (denoted by an {@link InjectMocks} annotation)<br />29 * <b>And</b> the {@link Object} under test has a {@link List} of collaborators with generics<br />30 * <b>And</b> the test Class defines mocks suitable types<br />31 * <b>When</b> I setup the test<br />32 * <b>Then</b> the mocks are injected as a {@link Collection} into the {@link Object} under test<br />33 * <b>And</b> the mocks in the {@link Collection} are in alphabetical order34 * 35 * @see ClassWithListOfCollaborators36 */37 public void objectUnderTestHasCollectionOfCollaborators();38 /**39 * <b>Scenario:</b> {@link Object} under test has {@link List} of collaborators40 * <p>41 * <b>Given</b> an {@link Object} under test (denoted by an {@link InjectMocks} annotation)<br />42 * <b>And</b> the {@link Object} under test has a {@link List} of collaborators with generics<br />43 * <b>And</b> the test Class defines mocks suitable types<br />44 * <b>When</b> I setup the test<br />45 * <b>Then</b> the mocks are injected as a {@link List} into the {@link Object} under test<br />46 * <b>And</b> the mocks in the {@link List} are in alphabetical order47 * 48 * @see ClassWithListOfCollaborators49 */50 public void objectUnderTestHasListOfCollaborators();51 /**52 * <b>Scenario:</b> {@link Object} under test has {@link Set} of collaborators53 * <p>54 * <b>Given</b> an object under test (denoted by an {@link InjectMocks} annotation)<br />55 * <b>And</b> the {@link Object} under test has a {@link Set} of collaborators with generics<br />56 * <b>And</b> the test Class defines mocks suitable types<br />57 * <b>When</b> I setup the test<br />58 * <b>Then</b> the mocks are injected as a {@link Set} into the {@link Object} under test<br />59 * <b>And</b> the mocks in the {@link Set} are in alphabetical order60 * 61 * @see ClassWithSetOfCollaborators62 */63 public void objectUnderTestHasSetOfCollaborators();64 /**65 * <b>Scenario:</b> {@link Object} under test has {@link SortedSet} of collaborators66 * <p>67 * <b>Given</b> an {@link Object} under test (denoted by an {@link InjectMocks} annotation)<br />68 * <b>And</b> the {@link Object} under test has a {@link SortedSet} of collaborators with generics<br />69 * <b>And</b> the test Class defines mocks suitable types<br />70 * <b>When</b> I setup the test<br />71 * <b>Then</b> the mocks are injected as a {@link SortedSet} into the {@link Object} under test<br />72 * <b>And</b> the mocks in the {@link SortedSet} are in alphabetical order<br />73 * 74 * @see ClassWithSortedSetOfCollaborators75 */76 public void objectUnderTestHasSortedSetOfCollaborators();77 /**78 * <b>Scenario:</b> {@link Object} under test has {@link Queue} of collaborators79 * <p>80 * <b>Given</b> an {@link Object} under test (denoted by an {@link InjectMocks} annotation)<br />81 * <b>And</b> the {@link Object} under test has one {@link Queue} of collaborators with generics<br />82 * <b>And</b> the test Class defines mocks suitable types<br />83 * <b>When</b> I setup the test<br />84 * <b>Then</b> the mocks are injected as a {@link Queue} into the object under test<br />85 * <b>And</b> the mocks in the {@link Queue} are in alphabetical order86 * 87 * @see ClassWithQueueOfCollaborators88 */89 public void objectUnderTestHasQueueOfCollaborators();90 /**91 * <b>Scenario:</b> {@link Object} under test has more than one {@link Collection} of collaborators92 * <p>93 * <b>Given</b> an {@link Object} under test (denoted by an {@link InjectMocks} annotation)<br />94 * <b>And</b> the {@link Object} under test has more than one {@link Collection} of collaborators with generics<br />95 * <b>And</b> the test Class defines mocks of suitable types for the {@link Collection Collections} of collaborators96 * <br />97 * <b>When</b> I setup the test<br />98 * <b>Then</b> the mocks are injected as {@link Collection Collections} into the object under test<br />99 * <b>And</b> the mocks in the {@link Collection Collections} are in alphabetical order100 * 101 * @see ClassWithMoreThanOneCollectionOfCollaborators102 */103 public void objectUnderTestHasMoreThanOneCollectionOfCollaborators();104 /**105 * <b>Scenario:</b> {@link Object} under test has no {@link Collection Collections} of collaborators106 * <p>107 * <b>Given</b> an {@link Object} under test (denoted by an {@link InjectMocks} annotation)<br />108 * <b>And</b> the {@link Object} under test has no {@link Collection Collections} of collaborators<br />109 * <b>When</b> I setup the test<br />110 * <b>Then</b> no {@link Collection Collections} of mocks are injected into the object under test111 */112 public void objectUnderTestHasNoCollectionsOfCollaborators();113 /**114 * <b>Scenario:</b> {@link Object} under test has {@link Collection Collections} of collaborators with no generics115 * <p>116 * <b>Given</b> an {@link Object} under test (denoted by an {@link InjectMocks} annotation)<br />117 * <b>And</b> the {@link Object} under test has {@link Collection Collections} of collaborators with no generics<br />118 * <b>When</b> I setup the test<br />119 * <b>Then</b> no {@link Collection Collections} of mocks are injected into the object under test120 * 121 * @see ClassWithCollectionOfCollaboratorsWithNoGenerics122 */123 public void classOfObjectUnderTestHasCollectionsOfCollaboratorsWithNoGenerics();124}...

Full Screen

Full Screen

Source:getCarTest.java Github

copy

Full Screen

...13import org.springframework.jdbc.core.JdbcTemplate;14import org.springframework.test.web.servlet.MockMvc;15import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;16import org.springframework.test.web.servlet.result.MockMvcResultMatchers;17import org.springframework.test.web.servlet.setup.MockMvcBuilders;18import org.springframework.util.LinkedMultiValueMap;19import org.springframework.util.MultiValueMap;20import com.example.demo.dto.GetCarResponseDTO;21import com.example.demo.exception.ServiceException;22import com.example.demo.logger.services.LoggerService;23import com.example.demo.logger.services.LoggerServiceImpl;24import com.example.demo.repository.CarRowMapper;25import com.example.demo.services.GetPricesCarService;26import com.example.demo.services.GetPricesCarServiceImpl;27@SpringBootTest28public class getCarTest {29 @InjectMocks30 private CarController carController;31 @InjectMocks...

Full Screen

Full Screen

Source:getCarsXlsTest.java Github

copy

Full Screen

...11import org.springframework.http.HttpStatus;12import org.springframework.test.web.servlet.MockMvc;13import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;14import org.springframework.test.web.servlet.result.MockMvcResultMatchers;15import org.springframework.test.web.servlet.setup.MockMvcBuilders;16import com.example.demo.exception.ServiceException;17import com.example.demo.logger.services.LoggerService;18import com.example.demo.logger.services.LoggerServiceImpl;19import com.example.demo.repository.CarRepository;20import com.example.demo.services.GetPricesCarService;21import com.example.demo.services.GetPricesCarServiceImpl;22@SpringBootTest23public class getCarsXlsTest {24 @InjectMocks25 private CarController carController;26 @InjectMocks27 private GetPricesCarServiceImpl getPricesCarServiceImpl;28 @InjectMocks29 private LoggerServiceImpl loggerServiceImpl;...

Full Screen

Full Screen

Source:InjectMocks.java Github

copy

Full Screen

...50 * <p>51 * <b><code>MockitoAnnotations.injectMocks(this)</code></b> method has to called to initialize annotated objects.52 * <p>53 * In above example, <code>injectMocks()</code> is called in &#064;Before (JUnit4) method of test's base class.54 * For JUnit3 <code>injectMocks()</code> can go to <code>setup()</code> method of a base class.55 * You can also put injectMocks() in your JUnit runner (&#064;RunWith) or use built-in runners: {@link org.mockito.runners.MockitoJUnitRunner}56 */57@Documented58@Target( { FIELD })59@Retention(RetentionPolicy.RUNTIME)60public @interface InjectMocks {} ...

Full Screen

Full Screen

Source:TestCalculator.java Github

copy

Full Screen

...32 CalculatorService service;33 34 @Before35 public void setUp() {36 System.out.println("Called setup only after the @Before was added");37 }38 39 @After40 public void tearDown() {41 System.out.println("Called teardown only after the @After was added");42 }43 44 @Test45 public void testAdd() {46 47 when(service.addNumbers(3, 5)).thenReturn(8);48 49 assertEquals(calculator.addInteger(3, 5), 8);50 ...

Full Screen

Full Screen

Source:UserControllerTest.java Github

copy

Full Screen

...7import org.mockito.InjectMocks;8import org.mockito.Mock;9import org.mockito.MockitoAnnotations;10import org.springframework.test.web.servlet.ResultActions;11import org.springframework.test.web.servlet.setup.MockMvcBuilders;12import java.util.List;13import static com.lab4.demo.UrlMapping.USER;14import static org.mockito.Mockito.when;15import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;16import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;17class UserControllerTest extends BaseControllerTest {18 @InjectMocks19 private UserController controller;20 @Mock21 private UserService userService;22 @BeforeEach23 protected void setUp() {24 super.setUp();25 MockitoAnnotations.openMocks(this);...

Full Screen

Full Screen

Source:TestCalculatorV2.java Github

copy

Full Screen

...17 // @Mock annotation is used to create the mock object to be injected18 @Mock19 CalculatorService calculatorService;20 @Before21 public void setup() {22 // calculator = new Calculator(calculatorService);23 }24 @Test25 public void testPerformComplexTask() {26 when(calculatorService.add(2, 3)).thenReturn(5);27 assertEquals(5, calculator.performComplexTask(2, 3));28 // verify that mock object is executed once29 verify(calculatorService).add(2, 3);30 }31}...

Full Screen

Full Screen

Source:PromotionServiceImplTest.java Github

copy

Full Screen

1package com.example.service.implementation;2import com.example.TestDataSetup;3import com.example.data.Promotion;4import com.example.repository.PromotionRepository;5import org.junit.Before;6import org.junit.Test;7import org.junit.runner.RunWith;8import org.mockito.InjectMocks;9import org.mockito.Mock;10import org.mockito.junit.MockitoJUnitRunner;11import java.util.List;12import static org.junit.Assert.assertEquals;13import static org.mockito.Mockito.when;14@RunWith(MockitoJUnitRunner.class)15public class PromotionServiceImplTest {16 List<Promotion> promotions;17 @Mock18 private PromotionRepository promotionRepository;19 @InjectMocks20 private PromotionServiceImpl promotionService;21 @Before22 public void setUp() {23 promotions = TestDataSetup.getActivePromotions();24 when(promotionRepository.findAllByActiveIsTrue()).thenReturn(promotions);25 }26 @Test27 public void getActivePromotions() {28 assertEquals(promotions, promotionService.getActivePromotions());29 }30}...

Full Screen

Full Screen

setup

Using AI Code Generation

copy

Full Screen

1package com.automationtesting;2import java.util.ArrayList;3import java.util.List;4import org.junit.Assert;5import org.junit.Before;6import org.junit.Test;7import org.junit.runner.RunWith;8import org.mockito.InjectMocks;9import org.mockito.Mock;10import org.mockito.Mockito;11import org.mockito.MockitoAnnotations;12import org.mockito.runners.MockitoJUnitRunner;13@RunWith(MockitoJUnitRunner.class)14public class MockitoInjectMocksExample {15 List<String> mockList;16 ArrayList<String> arrayList = new ArrayList<String>();17 public void setUp() throws Exception {18 MockitoAnnotations.initMocks(this);19 }20 public void test() {21 mockList.add("one");22 Mockito.verify(mockList).add("one");23 Assert.assertEquals(0, arrayList.size());24 Mockito.when(mockList.size()).thenReturn(100);25 Assert.assertEquals(100, mockList.size());26 }27}28at org.mockito.internal.configuration.InjectingAnnotationEngine.validateMockitoUsage(InjectingAnnotationEngine.java:79)29at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:60)30at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:37)31at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:37)32at org.mockito.internal.configuration.InjectingAnnotationEngine.processIndependentAnnotations(InjectingAnnotationEngine.java:48)33at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:41)34at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:37)35at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:26)36at org.mockito.internal.configuration.DefaultAnnotationEngine.createMockFor(DefaultAnnotationEngine.java:38)37at org.mockito.internal.configuration.DefaultAnnotationEngine.process(DefaultAnnotationEngine.java:63)38at org.mockito.internal.configuration.DefaultAnnotationEngine.process(DefaultAnnotationEngine.java:42)39at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:37)40at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:26)41at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:43)

Full Screen

Full Screen

setup

Using AI Code Generation

copy

Full Screen

1package com.automationrhapsody.mockito;2import org.junit.Before;3import org.junit.Test;4import org.junit.runner.RunWith;5import org.mockito.InjectMocks;6import org.mockito.Mock;7import org.mockito.Mockito;8import org.mockito.junit.MockitoJUnitRunner;9@RunWith(MockitoJUnitRunner.class)10public class MockitoInjectMocksTest {11 private Dependency dependency;12 private SystemUnderTest systemUnderTest;13 public void setup() {14 Mockito.when(dependency.giveMeSomeData()).thenReturn(100);15 }16 public void test() {17 systemUnderTest.methodUsingAnArrayListConstructor();18 }19}20package com.automationrhapsody.mockito;21import org.junit.Before;22import org.junit.Test;23import org.junit.runner.RunWith;24import org.mockito.InjectMocks;25import org.mockito.Mock;26import org.mockito.Mockito;27import org.mockito.runners.MockitoJUnitRunner;28@RunWith(MockitoJUnitRunner.class)29public class MockitoInjectMocksTest {30 private Dependency dependency;31 private SystemUnderTest systemUnderTest;32 public void setup() {33 Mockito.when(dependency.giveMeSomeData()).thenReturn(100);34 }35 public void test() {36 systemUnderTest.methodUsingAnArrayListConstructor();37 }38}39package com.automationrhapsody.mockito;40import org.junit.Before;41import org.junit.Test;42import org.junit.runner.RunWith;43import org.mockito.InjectMocks;44import org.mockito.Mock;45import org.mockito.Mockito;46import org.mockito.runners.MockitoJUnitRunner;47@RunWith(MockitoJUnitRunner.class)48public class MockitoInjectMocksTest {49 private Dependency dependency;50 private SystemUnderTest systemUnderTest;51 public void setup() {52 Mockito.when(dependency.giveMeSomeData()).thenReturn(100);53 }54 public void test() {55 systemUnderTest.methodUsingAnArrayListConstructor();56 }57}58package com.automationrhapsody.mockito;59import org.junit.Before;60import org.junit.Test;61import org.junit.runner.RunWith;62import org.mockito.InjectMocks;63import org.mockito.Mock;64import org.mockito

Full Screen

Full Screen

setup

Using AI Code Generation

copy

Full Screen

1package com.acko.loan;2import static org.junit.Assert.assertEquals;3import static org.mockito.Mockito.when;4import org.junit.Before;5import org.junit.Test;6import org.junit.runner.RunWith;7import org.mockito.InjectMocks;8import org.mockito.Mock;9import org.mockito.MockitoAnnotations;10import org.mockito.runners.MockitoJUnitRunner;11import org.springframework.beans.factory.annotation.Autowired;12@RunWith(MockitoJUnitRunner.class)13public class LoanControllerTest {14 LoanController loanController;15 LoanService loanService;16 public void setup() {17 MockitoAnnotations.initMocks(this);18 }19 public void testLoanController() {20 when(loanService.getLoanDetails()).thenReturn("Loan Details");21 assertEquals("Loan Details", loanController.getLoanDetails());22 }23}

Full Screen

Full Screen

setup

Using AI Code Generation

copy

Full Screen

1package com.acko.automation.test;2import java.util.ArrayList;3import java.util.List;4import org.junit.Test;5import org.junit.runner.RunWith;6import org.mockito.InjectMocks;7import org.mockito.Mock;8import org.mockito.Mockito;9import org.mockito.MockitoAnnotations;10import org.mockito.runners.MockitoJUnitRunner;11import org.testng.Assert;12import com.acko.automation.test.model.Employee;13import com.acko.automation.test.service.EmployeeService;14@RunWith(MockitoJUnitRunner.class)15public class EmployeeServiceTest {16 EmployeeService employeeService;17 Employee employee;18 public void test() {19 MockitoAnnotations.initMocks(this);20 List<Employee> employeeList = new ArrayList<Employee>();21 employeeList.add(employee);22 Mockito.when(employeeService.getAllEmployees()).thenReturn(employeeList);23 Assert.assertEquals(1, employeeService.getAllEmployees().size());24 }25}26package com.acko.automation.test;27import java.util.ArrayList;28import java.util.List;29import org.junit.Test;30import org.junit.runner.RunWith;31import org.mockito.InjectMocks;32import org.mockito.Mock;33import org.mockito.Mockito;34import org.mockito.runners.MockitoJUnitRunner;35import org.testng.Assert;36import com.acko.automation.test.model.Employee;37import com.acko.automation.test.service.EmployeeService;38@RunWith(MockitoJUnitRunner.class)39public class EmployeeServiceTest {40 EmployeeService employeeService;41 Employee employee;42 public void test() {43 List<Employee> employeeList = new ArrayList<Employee>();44 employeeList.add(employee);45 Mockito.when(employeeService.getAllEmployees()).thenReturn(employeeList);46 Assert.assertEquals(1, employeeService.getAllEmployees().size());47 }48}49package com.acko.automation.test;50import java.util.ArrayList;51import java.util.List;52import org.junit.Test;53import org.junit.runner.RunWith;54import org.mockito.InjectMocks;55import org.mockito.Mock;56import org.mockito.Mockito;57import org.mockito.runners.MockitoJUnitRunner;58import org.testng.Assert;59import com.acko.automation.test.model.Employee;60import com.acko.automation.test.service.EmployeeService;61@RunWith(MockitoJUnitRunner.class)62public class EmployeeServiceTest {

Full Screen

Full Screen

setup

Using AI Code Generation

copy

Full Screen

1public class 1 {2 private MyService myService;3 private MyRepository myRepository;4 public void setup() {5 MockitoAnnotations.initMocks(this);6 }7 public void test() {8 }9}10public class 2 {11 private MyService myService;12 private MyRepository myRepository;13 public void setup() {14 MockitoAnnotations.initMocks(this);15 MockitoAnnotations.initMocks(this);16 }17 public void test() {18 }19}20public class 3 {21 private MyService myService;22 private MyRepository myRepository;23 public void setup() {24 MockitoAnnotations.initMocks(this);25 MockitoAnnotations.initMocks(this);26 }27 public void test() {28 }29}30public class 4 {31 private MyService myService;32 private MyRepository myRepository;33 public void setup() {34 MockitoAnnotations.initMocks(this);35 MockitoAnnotations.initMocks(this);36 }37 public void test() {38 }39}40public class 5 {41 private MyService myService;42 private MyRepository myRepository;43 public void setup() {44 MockitoAnnotations.initMocks(this);45 MockitoAnnotations.initMocks(this);46 }47 public void test() {48 }49}50public class 6 {51 private MyService myService;52 private MyRepository myRepository;53 public void setup() {54 MockitoAnnotations.initMocks(this);55 MockitoAnnotations.initMocks(this

Full Screen

Full Screen

setup

Using AI Code Generation

copy

Full Screen

1package org.mockito;2import org.junit.Before;3import org.junit.Test;4import org.mockito.InjectMocks;5import org.mockito.Mock;6import org.mockito.MockitoAnnotations;7public class InjectMocksTest {8 private Dependency dependency;9 private ClassToTest classToTest;10 public void setUp() {11 MockitoAnnotations.initMocks(this);12 }13 public void test() {14 classToTest.methodToTest();15 }16}17package org.mockito;18import org.junit.Before;19import org.junit.Test;20import org.mockito.InjectMocks;21import org.mockito.Mock;22import org.mockito.Mockito;23public class InjectMocksTest {24 private Dependency dependency;25 private ClassToTest classToTest;26 public void setUp() {27 MockitoAnnotations.initMocks(this);28 }29 public void test() {30 classToTest.methodToTest();31 }32}33package org.mockito;34import org.junit.Before;35import org.junit.Test;36import org.mockito.InjectMocks;37import org.mockito.Mock;38import org.mockito.Mockito;39public class InjectMocksTest {40 private Dependency dependency;41 private ClassToTest classToTest;42 public void setUp() {43 MockitoAnnotations.initMocks(this);44 }45 public void test() {46 classToTest.methodToTest();47 }48}49package org.mockito;50import org.junit.Before;51import org.junit.Test;52import org.mockito.InjectMocks;53import org.mockito.Mock;54import org.mockito.Mockito;55public class InjectMocksTest {56 private Dependency dependency;57 private ClassToTest classToTest;58 public void setUp() {59 MockitoAnnotations.initMocks(this);60 }61 public void test() {62 classToTest.methodToTest();63 }64}65package org.mockito;66import org.junit.Before;67import org.junit.Test;68import org.mockito.InjectMocks;69import org.mockito.Mock;

Full Screen

Full Screen

setup

Using AI Code Generation

copy

Full Screen

1package com.automationrhapsody.junit;2import static org.junit.Assert.assertEquals;3import static org.mockito.Mockito.doReturn;4import static org.mockito.Mockito.verify;5import static org.mockito.Mockito.when;6import java.util.Arrays;7import java.util.List;8import org.junit.Before;9import org.junit.Test;10import org.junit.runner.RunWith;11import org.mockito.InjectMocks;12import org.mockito.Mock;13import org.mockito.runners.MockitoJUnitRunner;14@RunWith(MockitoJUnitRunner.class)15public class MockitoInjectMocksTest {16 private List<String> list;17 private List<String> list2 = Arrays.asList("one", "two");18 public void setUp() {19 when(list.get(0)).thenReturn("one");20 when(list.get(1)).thenReturn("two");21 }22 public void testInjectMocks() {23 assertEquals("one", list2.get(0));24 assertEquals("two", list2.get(1));25 }26 public void testInjectMocks2() {27 doReturn("one").when(list).get(0);28 doReturn("two").when(list).get(1);29 assertEquals("one", list2.get(0));30 assertEquals("two", list2.get(1));31 }32 public void testInjectMocks3() {33 assertEquals("one", list.get(0));34 assertEquals("two", list.get(1));35 }36 public void testInjectMocks4() {37 assertEquals("one", list2.get(0));38 assertEquals("two", list2.get(1));39 verify(list).get(0);40 verify(list).get(1);41 }42}43[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ MockitoInjectMocksTest ---44[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ MockitoInjectMocks

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Mockito automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful