Is there a way to fake a method response using Mock or Stubs? Announcing the arrival of Valued...

Variable does not exist: sObjectType (Task.sObjectType)

Specify the range of GridLines

Israeli soda type drink

My admission is revoked after accepting the admission offer

Is a self contained air-bullet cartridge feasible?

When I export an AI 300x60 art board it saves with bigger dimensions

How long can a nation maintain a technological edge over the rest of the world?

How to translate "red flag" into Spanish?

Feather, the Redeemed and Dire Fleet Daredevil

What were wait-states, and why was it only an issue for PCs?

Why did Europeans not widely domesticate foxes?

Is it OK if I do not take the receipt in Germany?

When does Bran Stark remember Jamie pushing him?

A journey... into the MIND

Does a Draconic Bloodline sorcerer's doubled proficiency bonus for Charisma checks against dragons apply to all dragon types or only the chosen one?

What's called a person who work as someone who puts products on shelves in stores?

Marquee sign letters

What does the black goddess statue do and what is it?

Writing a T-SQL stored procedure to receive 4 numbers and insert them into a table

Coin Game with infinite paradox

Determinant of a matrix with 2 equal rows

Was Objective-C really a hindrance to Apple software development?

What do you call an IPA symbol that lacks a name (e.g. ɲ)?

Did war bonds have better investment alternatives during WWII?



Is there a way to fake a method response using Mock or Stubs?



Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern)
2019 Community Moderator Election ResultsDoes HttpCalloutMock work when the tested method doesn't return HttpResponse?Mock class not working with Dynamic & Unique end-pointHTTP Mock Response class has 0 coverageIs there a way to create more than 50000 records in a unit test context?Mock Service .setBody()Post callout behavior assertions for unit test with static resource callout mock failBasic Mock Test Coverage HelpHow can I reference a trigger's method and/or variable from a test class?Can we mock relationships in Apex?Method Is Not Visible: APEX Trailhead Unit Testing Challenge





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}







2















I have a helper method in my code called canQueryObject, and that method returns a boolean. I have some code that calls the method via the following line of code:



if(!myObjectHelper.canQueryObject(Schema.SObjectType.<<objectType>>)){ ... }


I'd like to test some scenarios where the scenario is false. Is there a way I can use Mock or Stubs in a unit-test to set canQueryObject to false?










share|improve this question































    2















    I have a helper method in my code called canQueryObject, and that method returns a boolean. I have some code that calls the method via the following line of code:



    if(!myObjectHelper.canQueryObject(Schema.SObjectType.<<objectType>>)){ ... }


    I'd like to test some scenarios where the scenario is false. Is there a way I can use Mock or Stubs in a unit-test to set canQueryObject to false?










    share|improve this question



























      2












      2








      2








      I have a helper method in my code called canQueryObject, and that method returns a boolean. I have some code that calls the method via the following line of code:



      if(!myObjectHelper.canQueryObject(Schema.SObjectType.<<objectType>>)){ ... }


      I'd like to test some scenarios where the scenario is false. Is there a way I can use Mock or Stubs in a unit-test to set canQueryObject to false?










      share|improve this question
















      I have a helper method in my code called canQueryObject, and that method returns a boolean. I have some code that calls the method via the following line of code:



      if(!myObjectHelper.canQueryObject(Schema.SObjectType.<<objectType>>)){ ... }


      I'd like to test some scenarios where the scenario is false. Is there a way I can use Mock or Stubs in a unit-test to set canQueryObject to false?







      unit-test mock






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 2 hours ago







      WEFX

















      asked 2 hours ago









      WEFXWEFX

      1538




      1538






















          1 Answer
          1






          active

          oldest

          votes


















          5














          I typically use a fairly simple pattern and don't bring in a framework. It would look something like the following:



          public virtual with sharing class MyObjectHelper
          {
          static MyObjectHelper instance = new MyObjectHelper();
          @TestVisible static void setMock(MyObjectHelper mock) { instance = mock; }

          public static Boolean canQueryObject(SObjectType sObjectType)
          {
          return instance.getCanQueryObject(sObjectType);
          }

          // the two method names cannot match or you will get a compile fail
          protected virtual Boolean getCanQueryObject(SObjectType sObjectType)
          {
          return sObjectType.getDescribe().isQueryable();
          }
          }


          Then in your test, you can have a mock return always true or always false, as you wish.



          @IsTest
          class MyObjectHelperTests
          {
          class HelperMock extends MyObjectHelper
          {
          Boolean isQueryable = true;
          protected override Boolean getCanQueryObject(SObjectType sObjectType)
          {
          return isQueryable;
          }
          }

          @IsTest static void testCannotQuery()
          {
          HelperMock mock = new HelperMock();
          mock.isQueryable = false;
          MyObjectHelper.setMock(mock);

          Test.startTest();
          Boolean canQuery = MyObjectHelper.canQueryObject(...);
          Test.stopTest();

          system.assertEquals(false, canQuery, 'Some informative message');
          }
          }





          share|improve this answer
























            Your Answer








            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "459"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f258841%2fis-there-a-way-to-fake-a-method-response-using-mock-or-stubs%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            5














            I typically use a fairly simple pattern and don't bring in a framework. It would look something like the following:



            public virtual with sharing class MyObjectHelper
            {
            static MyObjectHelper instance = new MyObjectHelper();
            @TestVisible static void setMock(MyObjectHelper mock) { instance = mock; }

            public static Boolean canQueryObject(SObjectType sObjectType)
            {
            return instance.getCanQueryObject(sObjectType);
            }

            // the two method names cannot match or you will get a compile fail
            protected virtual Boolean getCanQueryObject(SObjectType sObjectType)
            {
            return sObjectType.getDescribe().isQueryable();
            }
            }


            Then in your test, you can have a mock return always true or always false, as you wish.



            @IsTest
            class MyObjectHelperTests
            {
            class HelperMock extends MyObjectHelper
            {
            Boolean isQueryable = true;
            protected override Boolean getCanQueryObject(SObjectType sObjectType)
            {
            return isQueryable;
            }
            }

            @IsTest static void testCannotQuery()
            {
            HelperMock mock = new HelperMock();
            mock.isQueryable = false;
            MyObjectHelper.setMock(mock);

            Test.startTest();
            Boolean canQuery = MyObjectHelper.canQueryObject(...);
            Test.stopTest();

            system.assertEquals(false, canQuery, 'Some informative message');
            }
            }





            share|improve this answer




























              5














              I typically use a fairly simple pattern and don't bring in a framework. It would look something like the following:



              public virtual with sharing class MyObjectHelper
              {
              static MyObjectHelper instance = new MyObjectHelper();
              @TestVisible static void setMock(MyObjectHelper mock) { instance = mock; }

              public static Boolean canQueryObject(SObjectType sObjectType)
              {
              return instance.getCanQueryObject(sObjectType);
              }

              // the two method names cannot match or you will get a compile fail
              protected virtual Boolean getCanQueryObject(SObjectType sObjectType)
              {
              return sObjectType.getDescribe().isQueryable();
              }
              }


              Then in your test, you can have a mock return always true or always false, as you wish.



              @IsTest
              class MyObjectHelperTests
              {
              class HelperMock extends MyObjectHelper
              {
              Boolean isQueryable = true;
              protected override Boolean getCanQueryObject(SObjectType sObjectType)
              {
              return isQueryable;
              }
              }

              @IsTest static void testCannotQuery()
              {
              HelperMock mock = new HelperMock();
              mock.isQueryable = false;
              MyObjectHelper.setMock(mock);

              Test.startTest();
              Boolean canQuery = MyObjectHelper.canQueryObject(...);
              Test.stopTest();

              system.assertEquals(false, canQuery, 'Some informative message');
              }
              }





              share|improve this answer


























                5












                5








                5







                I typically use a fairly simple pattern and don't bring in a framework. It would look something like the following:



                public virtual with sharing class MyObjectHelper
                {
                static MyObjectHelper instance = new MyObjectHelper();
                @TestVisible static void setMock(MyObjectHelper mock) { instance = mock; }

                public static Boolean canQueryObject(SObjectType sObjectType)
                {
                return instance.getCanQueryObject(sObjectType);
                }

                // the two method names cannot match or you will get a compile fail
                protected virtual Boolean getCanQueryObject(SObjectType sObjectType)
                {
                return sObjectType.getDescribe().isQueryable();
                }
                }


                Then in your test, you can have a mock return always true or always false, as you wish.



                @IsTest
                class MyObjectHelperTests
                {
                class HelperMock extends MyObjectHelper
                {
                Boolean isQueryable = true;
                protected override Boolean getCanQueryObject(SObjectType sObjectType)
                {
                return isQueryable;
                }
                }

                @IsTest static void testCannotQuery()
                {
                HelperMock mock = new HelperMock();
                mock.isQueryable = false;
                MyObjectHelper.setMock(mock);

                Test.startTest();
                Boolean canQuery = MyObjectHelper.canQueryObject(...);
                Test.stopTest();

                system.assertEquals(false, canQuery, 'Some informative message');
                }
                }





                share|improve this answer













                I typically use a fairly simple pattern and don't bring in a framework. It would look something like the following:



                public virtual with sharing class MyObjectHelper
                {
                static MyObjectHelper instance = new MyObjectHelper();
                @TestVisible static void setMock(MyObjectHelper mock) { instance = mock; }

                public static Boolean canQueryObject(SObjectType sObjectType)
                {
                return instance.getCanQueryObject(sObjectType);
                }

                // the two method names cannot match or you will get a compile fail
                protected virtual Boolean getCanQueryObject(SObjectType sObjectType)
                {
                return sObjectType.getDescribe().isQueryable();
                }
                }


                Then in your test, you can have a mock return always true or always false, as you wish.



                @IsTest
                class MyObjectHelperTests
                {
                class HelperMock extends MyObjectHelper
                {
                Boolean isQueryable = true;
                protected override Boolean getCanQueryObject(SObjectType sObjectType)
                {
                return isQueryable;
                }
                }

                @IsTest static void testCannotQuery()
                {
                HelperMock mock = new HelperMock();
                mock.isQueryable = false;
                MyObjectHelper.setMock(mock);

                Test.startTest();
                Boolean canQuery = MyObjectHelper.canQueryObject(...);
                Test.stopTest();

                system.assertEquals(false, canQuery, 'Some informative message');
                }
                }






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 2 hours ago









                Adrian LarsonAdrian Larson

                111k19121259




                111k19121259






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Salesforce Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f258841%2fis-there-a-way-to-fake-a-method-response-using-mock-or-stubs%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    迭戈·戈丁...

                    A phrase ”follow into" in a context The 2019 Stack Overflow Developer Survey Results Are...

                    1960s short story making fun of James Bond-style spy fiction The 2019 Stack Overflow Developer...