Is it a good practice to use a static variable in a Test Class and use that in the actual class instead of Test.isRunningTest()? The 2019 Stack Overflow Developer Survey Results Are InAssistance with a Test Class to increase code coverageCompilation error with a unit testError: Compile Error: Illegal assignment from String to Booleanschema.getglobaldescribe needs test classWhy is this test giving 0% coverage?Test class for the zenkraft process classI am not able to cover the specific code in Apex classHow to cover global class and method in test classHow can I reference a trigger's method and/or variable from a test class?Test Class: Unable to assert enqueueJob

Deal with toxic manager when you can't quit

How to charge AirPods to keep battery healthy?

Is it a good practice to use a static variable in a Test Class and use that in the actual class instead of Test.isRunningTest()?

What do hard-Brexiteers want with respect to the Irish border?

What is the meaning of Triage in Cybersec world?

What is this business jet?

What does もの mean in this sentence?

Relationship between Gromov-Witten and Taubes' Gromov invariant

Is Cinnamon a desktop environment or a window manager? (Or both?)

Inverse Relationship Between Precision and Recall

Did any laptop computers have a built-in 5 1/4 inch floppy drive?

How do I free up internal storage if I don't have any apps downloaded?

Why was M87 targeted for the Event Horizon Telescope instead of Sagittarius A*?

How do you keep chess fun when your opponent constantly beats you?

Why doesn't UInt have a toDouble()?

Can there be female White Walkers?

Geography at the pixel level

Can I have a signal generator on while it's not connected?

Is it ethical to upload a automatically generated paper to a non peer-reviewed site as part of a larger research?

Is it possible for absolutely everyone to attain enlightenment?

If my opponent casts Ultimate Price on my Phantasmal Bear, can I save it by casting Snap or Curfew?

How do PCB vias affect signal quality?

For what reasons would an animal species NOT cross a *horizontal* land bridge?

Accepted by European university, rejected by all American ones I applied to? Possible reasons?



Is it a good practice to use a static variable in a Test Class and use that in the actual class instead of Test.isRunningTest()?



The 2019 Stack Overflow Developer Survey Results Are InAssistance with a Test Class to increase code coverageCompilation error with a unit testError: Compile Error: Illegal assignment from String to Booleanschema.getglobaldescribe needs test classWhy is this test giving 0% coverage?Test class for the zenkraft process classI am not able to cover the specific code in Apex classHow to cover global class and method in test classHow can I reference a trigger's method and/or variable from a test class?Test Class: Unable to assert enqueueJob



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








1















I've read about using a static variable from a class in the test class but I'm wondering if this is legal enough to do.



@isTest
public class myTestClass
public static Boolean mySwitch = false;
public static testMethod void myTestMethod1()
// code //

public static testMethod void myTestMethod2()
mySwitch = true;
// code //



public class actualClass
public void method1()
if(Test.isRunningTest)
//always true if its hitting from a test class.
else if(Test.isRunningTest && myTestClass.mySwitch)
//do something from myTestMethod2












share|improve this question







New contributor




Apz is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 1





    What code/why are you trying to gate in test context? That's something one generally ought to do only if one really has to and has run out of other tools, in my opinion.

    – David Reed
    3 hours ago











  • I'm sorry but can't share my code here. I can explain why am trying to do this, let's say there is an if condition which can't be made true from a test class but can be done using Test.isRunningTest() in actual class. What this does now is that, it will always get into this if condition but not the next if-else conditions. My bad if this is confusing.

    – Apz
    3 hours ago

















1















I've read about using a static variable from a class in the test class but I'm wondering if this is legal enough to do.



@isTest
public class myTestClass
public static Boolean mySwitch = false;
public static testMethod void myTestMethod1()
// code //

public static testMethod void myTestMethod2()
mySwitch = true;
// code //



public class actualClass
public void method1()
if(Test.isRunningTest)
//always true if its hitting from a test class.
else if(Test.isRunningTest && myTestClass.mySwitch)
//do something from myTestMethod2












share|improve this question







New contributor




Apz is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 1





    What code/why are you trying to gate in test context? That's something one generally ought to do only if one really has to and has run out of other tools, in my opinion.

    – David Reed
    3 hours ago











  • I'm sorry but can't share my code here. I can explain why am trying to do this, let's say there is an if condition which can't be made true from a test class but can be done using Test.isRunningTest() in actual class. What this does now is that, it will always get into this if condition but not the next if-else conditions. My bad if this is confusing.

    – Apz
    3 hours ago













1












1








1








I've read about using a static variable from a class in the test class but I'm wondering if this is legal enough to do.



@isTest
public class myTestClass
public static Boolean mySwitch = false;
public static testMethod void myTestMethod1()
// code //

public static testMethod void myTestMethod2()
mySwitch = true;
// code //



public class actualClass
public void method1()
if(Test.isRunningTest)
//always true if its hitting from a test class.
else if(Test.isRunningTest && myTestClass.mySwitch)
//do something from myTestMethod2












share|improve this question







New contributor




Apz is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












I've read about using a static variable from a class in the test class but I'm wondering if this is legal enough to do.



@isTest
public class myTestClass
public static Boolean mySwitch = false;
public static testMethod void myTestMethod1()
// code //

public static testMethod void myTestMethod2()
mySwitch = true;
// code //



public class actualClass
public void method1()
if(Test.isRunningTest)
//always true if its hitting from a test class.
else if(Test.isRunningTest && myTestClass.mySwitch)
//do something from myTestMethod2









apex unit-test code-coverage






share|improve this question







New contributor




Apz is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question







New contributor




Apz is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question






New contributor




Apz is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 3 hours ago









ApzApz

61




61




New contributor




Apz is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Apz is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Apz is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







  • 1





    What code/why are you trying to gate in test context? That's something one generally ought to do only if one really has to and has run out of other tools, in my opinion.

    – David Reed
    3 hours ago











  • I'm sorry but can't share my code here. I can explain why am trying to do this, let's say there is an if condition which can't be made true from a test class but can be done using Test.isRunningTest() in actual class. What this does now is that, it will always get into this if condition but not the next if-else conditions. My bad if this is confusing.

    – Apz
    3 hours ago












  • 1





    What code/why are you trying to gate in test context? That's something one generally ought to do only if one really has to and has run out of other tools, in my opinion.

    – David Reed
    3 hours ago











  • I'm sorry but can't share my code here. I can explain why am trying to do this, let's say there is an if condition which can't be made true from a test class but can be done using Test.isRunningTest() in actual class. What this does now is that, it will always get into this if condition but not the next if-else conditions. My bad if this is confusing.

    – Apz
    3 hours ago







1




1





What code/why are you trying to gate in test context? That's something one generally ought to do only if one really has to and has run out of other tools, in my opinion.

– David Reed
3 hours ago





What code/why are you trying to gate in test context? That's something one generally ought to do only if one really has to and has run out of other tools, in my opinion.

– David Reed
3 hours ago













I'm sorry but can't share my code here. I can explain why am trying to do this, let's say there is an if condition which can't be made true from a test class but can be done using Test.isRunningTest() in actual class. What this does now is that, it will always get into this if condition but not the next if-else conditions. My bad if this is confusing.

– Apz
3 hours ago





I'm sorry but can't share my code here. I can explain why am trying to do this, let's say there is an if condition which can't be made true from a test class but can be done using Test.isRunningTest() in actual class. What this does now is that, it will always get into this if condition but not the next if-else conditions. My bad if this is confusing.

– Apz
3 hours ago










2 Answers
2






active

oldest

votes


















2














You cannot reference a test class from a production class. You have the pattern reversed on where the Boolean flag should be.



You should avoid code which runs only out of a test context wherever possible. There are a few exceptions, such as:



  • Disabling a trigger framework to save on run times if they become prohibitive

  • Disabling batch chaining or other aspects of asynchronous processing

In these cases, you still should not use Test.isRunningTest() (at least according to our coding guideline where I work). Instead, you should use a @TestVisible flag in your production code.



public with sharing class MyClass

@TestVisible static Boolean shouldDoStuff = true;
public static void doStuff()

if (!shouldDoStuff) return;

// actual logic

public static void doNonGatedStuff()

doStuff();

// other logic


@IsTest class MyClass

@IsTest static void testDoStuff()

MyClass.shouldDoStuff = false;

// rest of test




Sometimes you will see this logic reversed. For example our typical flag for trigger handlers is called bypassTrigger, which would obviously default to false. You set it to true before inserting some records for setup, then bookend it back to false so that any further operations will still run the trigger.






share|improve this answer

























  • P.S. You didn't actually answer the question of "if this is legal?"

    – sfdcfox
    3 hours ago











  • Because the way it was written wouldn't work, I simply showed how it can be done.

    – Adrian Larson
    3 hours ago


















0














No, it is not valid. You cannot access any variables or methods inside a class marked @isTest outside of a test context. Instead, you need to place the static variable inside the actual class, then modify it in the test class:



@isTest
public class myTestClass
public static testMethod void myTestMethod1()
// code //

public static testMethod void myTestMethod2()
actualClass.mySwitch = true;
// code //



public class actualClass
@TestVisible static Boolean mySwitch = false;
public void method2()
if(mySwitch)
//do something from myTestMethod2





You can use @TestVisible to prevent accessing the variable outside of testing context.






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
    );



    );






    Apz is a new contributor. Be nice, and check out our Code of Conduct.









    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f257558%2fis-it-a-good-practice-to-use-a-static-variable-in-a-test-class-and-use-that-in-t%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    2














    You cannot reference a test class from a production class. You have the pattern reversed on where the Boolean flag should be.



    You should avoid code which runs only out of a test context wherever possible. There are a few exceptions, such as:



    • Disabling a trigger framework to save on run times if they become prohibitive

    • Disabling batch chaining or other aspects of asynchronous processing

    In these cases, you still should not use Test.isRunningTest() (at least according to our coding guideline where I work). Instead, you should use a @TestVisible flag in your production code.



    public with sharing class MyClass

    @TestVisible static Boolean shouldDoStuff = true;
    public static void doStuff()

    if (!shouldDoStuff) return;

    // actual logic

    public static void doNonGatedStuff()

    doStuff();

    // other logic


    @IsTest class MyClass

    @IsTest static void testDoStuff()

    MyClass.shouldDoStuff = false;

    // rest of test




    Sometimes you will see this logic reversed. For example our typical flag for trigger handlers is called bypassTrigger, which would obviously default to false. You set it to true before inserting some records for setup, then bookend it back to false so that any further operations will still run the trigger.






    share|improve this answer

























    • P.S. You didn't actually answer the question of "if this is legal?"

      – sfdcfox
      3 hours ago











    • Because the way it was written wouldn't work, I simply showed how it can be done.

      – Adrian Larson
      3 hours ago















    2














    You cannot reference a test class from a production class. You have the pattern reversed on where the Boolean flag should be.



    You should avoid code which runs only out of a test context wherever possible. There are a few exceptions, such as:



    • Disabling a trigger framework to save on run times if they become prohibitive

    • Disabling batch chaining or other aspects of asynchronous processing

    In these cases, you still should not use Test.isRunningTest() (at least according to our coding guideline where I work). Instead, you should use a @TestVisible flag in your production code.



    public with sharing class MyClass

    @TestVisible static Boolean shouldDoStuff = true;
    public static void doStuff()

    if (!shouldDoStuff) return;

    // actual logic

    public static void doNonGatedStuff()

    doStuff();

    // other logic


    @IsTest class MyClass

    @IsTest static void testDoStuff()

    MyClass.shouldDoStuff = false;

    // rest of test




    Sometimes you will see this logic reversed. For example our typical flag for trigger handlers is called bypassTrigger, which would obviously default to false. You set it to true before inserting some records for setup, then bookend it back to false so that any further operations will still run the trigger.






    share|improve this answer

























    • P.S. You didn't actually answer the question of "if this is legal?"

      – sfdcfox
      3 hours ago











    • Because the way it was written wouldn't work, I simply showed how it can be done.

      – Adrian Larson
      3 hours ago













    2












    2








    2







    You cannot reference a test class from a production class. You have the pattern reversed on where the Boolean flag should be.



    You should avoid code which runs only out of a test context wherever possible. There are a few exceptions, such as:



    • Disabling a trigger framework to save on run times if they become prohibitive

    • Disabling batch chaining or other aspects of asynchronous processing

    In these cases, you still should not use Test.isRunningTest() (at least according to our coding guideline where I work). Instead, you should use a @TestVisible flag in your production code.



    public with sharing class MyClass

    @TestVisible static Boolean shouldDoStuff = true;
    public static void doStuff()

    if (!shouldDoStuff) return;

    // actual logic

    public static void doNonGatedStuff()

    doStuff();

    // other logic


    @IsTest class MyClass

    @IsTest static void testDoStuff()

    MyClass.shouldDoStuff = false;

    // rest of test




    Sometimes you will see this logic reversed. For example our typical flag for trigger handlers is called bypassTrigger, which would obviously default to false. You set it to true before inserting some records for setup, then bookend it back to false so that any further operations will still run the trigger.






    share|improve this answer















    You cannot reference a test class from a production class. You have the pattern reversed on where the Boolean flag should be.



    You should avoid code which runs only out of a test context wherever possible. There are a few exceptions, such as:



    • Disabling a trigger framework to save on run times if they become prohibitive

    • Disabling batch chaining or other aspects of asynchronous processing

    In these cases, you still should not use Test.isRunningTest() (at least according to our coding guideline where I work). Instead, you should use a @TestVisible flag in your production code.



    public with sharing class MyClass

    @TestVisible static Boolean shouldDoStuff = true;
    public static void doStuff()

    if (!shouldDoStuff) return;

    // actual logic

    public static void doNonGatedStuff()

    doStuff();

    // other logic


    @IsTest class MyClass

    @IsTest static void testDoStuff()

    MyClass.shouldDoStuff = false;

    // rest of test




    Sometimes you will see this logic reversed. For example our typical flag for trigger handlers is called bypassTrigger, which would obviously default to false. You set it to true before inserting some records for setup, then bookend it back to false so that any further operations will still run the trigger.







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited 3 hours ago

























    answered 3 hours ago









    Adrian LarsonAdrian Larson

    110k19120256




    110k19120256












    • P.S. You didn't actually answer the question of "if this is legal?"

      – sfdcfox
      3 hours ago











    • Because the way it was written wouldn't work, I simply showed how it can be done.

      – Adrian Larson
      3 hours ago

















    • P.S. You didn't actually answer the question of "if this is legal?"

      – sfdcfox
      3 hours ago











    • Because the way it was written wouldn't work, I simply showed how it can be done.

      – Adrian Larson
      3 hours ago
















    P.S. You didn't actually answer the question of "if this is legal?"

    – sfdcfox
    3 hours ago





    P.S. You didn't actually answer the question of "if this is legal?"

    – sfdcfox
    3 hours ago













    Because the way it was written wouldn't work, I simply showed how it can be done.

    – Adrian Larson
    3 hours ago





    Because the way it was written wouldn't work, I simply showed how it can be done.

    – Adrian Larson
    3 hours ago













    0














    No, it is not valid. You cannot access any variables or methods inside a class marked @isTest outside of a test context. Instead, you need to place the static variable inside the actual class, then modify it in the test class:



    @isTest
    public class myTestClass
    public static testMethod void myTestMethod1()
    // code //

    public static testMethod void myTestMethod2()
    actualClass.mySwitch = true;
    // code //



    public class actualClass
    @TestVisible static Boolean mySwitch = false;
    public void method2()
    if(mySwitch)
    //do something from myTestMethod2





    You can use @TestVisible to prevent accessing the variable outside of testing context.






    share|improve this answer





























      0














      No, it is not valid. You cannot access any variables or methods inside a class marked @isTest outside of a test context. Instead, you need to place the static variable inside the actual class, then modify it in the test class:



      @isTest
      public class myTestClass
      public static testMethod void myTestMethod1()
      // code //

      public static testMethod void myTestMethod2()
      actualClass.mySwitch = true;
      // code //



      public class actualClass
      @TestVisible static Boolean mySwitch = false;
      public void method2()
      if(mySwitch)
      //do something from myTestMethod2





      You can use @TestVisible to prevent accessing the variable outside of testing context.






      share|improve this answer



























        0












        0








        0







        No, it is not valid. You cannot access any variables or methods inside a class marked @isTest outside of a test context. Instead, you need to place the static variable inside the actual class, then modify it in the test class:



        @isTest
        public class myTestClass
        public static testMethod void myTestMethod1()
        // code //

        public static testMethod void myTestMethod2()
        actualClass.mySwitch = true;
        // code //



        public class actualClass
        @TestVisible static Boolean mySwitch = false;
        public void method2()
        if(mySwitch)
        //do something from myTestMethod2





        You can use @TestVisible to prevent accessing the variable outside of testing context.






        share|improve this answer















        No, it is not valid. You cannot access any variables or methods inside a class marked @isTest outside of a test context. Instead, you need to place the static variable inside the actual class, then modify it in the test class:



        @isTest
        public class myTestClass
        public static testMethod void myTestMethod1()
        // code //

        public static testMethod void myTestMethod2()
        actualClass.mySwitch = true;
        // code //



        public class actualClass
        @TestVisible static Boolean mySwitch = false;
        public void method2()
        if(mySwitch)
        //do something from myTestMethod2





        You can use @TestVisible to prevent accessing the variable outside of testing context.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited 3 hours ago

























        answered 3 hours ago









        sfdcfoxsfdcfox

        264k13211458




        264k13211458




















            Apz is a new contributor. Be nice, and check out our Code of Conduct.









            draft saved

            draft discarded


















            Apz is a new contributor. Be nice, and check out our Code of Conduct.












            Apz is a new contributor. Be nice, and check out our Code of Conduct.











            Apz is a new contributor. Be nice, and check out our Code of Conduct.














            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%2f257558%2fis-it-a-good-practice-to-use-a-static-variable-in-a-test-class-and-use-that-in-t%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

            کانن (شرکت) محتویات تاریخچه[ویرایش] بخشی از تولیدات موفق این شرکت[ویرایش] در رده APS-C[ویرایش] گزارش محیط زیست[ویرایش] رده‌بندی محصولات[ویرایش] منابع[ویرایش] پانویس[ویرایش] پیوند به بیرون[ویرایش] منوی ناوبریwww.canon.comموزه آنلاین دوربین‌های کانننمودار تاریخچه سهام کاننوبگاه رسمی شرکت کاننوووووIDC Worldwide Hardcopy 2013

            Rest API with Magento using PHP with example. Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?How to update product using magento client library for PHP?Oauth Error while extending Magento Rest APINot showing my custom api in wsdl(url) and web service list?Using Magento API(REST) via IXMLHTTPRequest COM ObjectHow to login in Magento website using REST APIREST api call for Guest userMagento API calling using HTML and javascriptUse API rest media management by storeView code (admin)Magento REST API Example ErrorsHow to log all rest api calls in magento2?How to update product using magento client library for PHP?

            Magento 2 - Auto login with specific URL Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Customer can't login - Page refreshes but nothing happensCustom Login page redirectURL to login with redirect URL after completionCustomer login is case sensitiveLogin with phone number or email address - Magento 1.9Magento 2: Set Customer Account Confirmation StatusCustomer auto connect from URLHow to call customer login form in the custom module action magento 2?Change of customer login error message magento2Referrer URL in modal login form