Can I use ABAP Unit tests in classic ABAP report?

I am not sure whether I understood the question correctly, but you can most certainly include unit tests in ABAP programs, e.g. report programs. Include the below code in a report program, then compile it.

Afterward, when you go to the Object List (Ctrl+Shift+F5 to show), you can right-click on your program, then choose Execute -> Unit Tests from the menu.

The important part is that unit tests are marked as FOR TESTING and have at least one method marked FOR TESTING as well. The RISK LEVEL addition will also determine whether, according to the system settings, a test is allowed to run. (Hit F1 on the keyword in the editor to read more).

* The following defines a unit test class
class unit_tests definition for testing risk level harmless.
  public section.
    methods: test_query for testing.
endclass.

class unit_tests implementation.
  method test_query.
    data: lv_result type string.
    perform execute_query_b using '123' changing lv_result.
    assert lv_result = 'Expected_value'.
  endmethod.
endclass.

* Here is a subroutine in our program we wish to test
form execute_query_b using a changing res.
  res = 'Expected_value'.
endform.

In ABAP programming it will allow the developer to do the unit testing.

ABAP also contains MACRO's concept as like in C-programming, but in ABAP MACROS does not allows unit testing.

REPORT ZDEMO_INTERNALTABLES.

TYPES : BEGIN OF ty_scarr,

        carrid TYPE scarr-carrid,
        carrname TYPE scarr-carrname,
        END OF ty_scarr.

DATA : it_scarr TYPE STANDARD TABLE OF ty_scarr,

       wa_scarr TYPE ty_scarr.
      PERFORM SA .

*&---------------------------------------------------------------------*
*&      Form  SA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*

FORM SA .

  wa_scarr-carrid = 'AA'.
        wa_scarr-carrname = 'American airlines'.
        insert wa_scarr into table it_scarr .

         wa_scarr-carrid = 'df'.
        wa_scarr-carrname = 'xmy demy airlines'.
        insert wa_scarr into table it_scarr.

         wa_scarr-carrid = 'AC'.
        wa_scarr-carrname = 'AIRLINES'.
        APPEND WA_SCARR TO IT_SCARR.

         wa_scarr-carrid = 'AD'.
        wa_scarr-carrname = 'American airlines'.
        insert wa_scarr into table it_scarr.


        if SY-SUBRC = 0.
          ENDIF.
ENDFORM.                    " SA

Here's an example report with unit tests:

report ztest.

end-of-selection.

  data number type i value 10.
  perform write_value using number.
  perform add_5 changing number.
  perform write_value using number.
  perform subtract_2 changing number.
  perform write_value using number.


form add_5 changing x type i.
  x = x + 5.
endform.

form subtract_2 changing x type i.
  x = x - 2.
endform.

form write_value using x type i.
  data x_str type string.
  x_str = x.
  condense x_str.
  write: / x_str.
endform.

class lcl_test definition for testing duration short risk level harmless.
  public section.
  protected section.
    methods add_5 for testing.
    methods subtract_2 for testing.
  private section.
    methods setup.
endclass.

class lcl_test implementation.
  method add_5.
    data number type i.
    number = 5.
    perform add_5 changing number.
    cl_aunit_assert=>assert_equals( act = number exp = 10 ).
    number = 20.
    perform add_5 changing number.
    cl_aunit_assert=>assert_equals( act = number exp = 25 ).
  endmethod.
  method subtract_2.
    data number type i.
    number = 5.
    perform subtract_2 changing number.
    cl_aunit_assert=>assert_equals( act = number exp = 3 ).
    number = 20.
    perform subtract_2 changing number.
    cl_aunit_assert=>assert_equals( act = number exp = 18 ).
  endmethod.
  method setup.
  endmethod.
endclass.

You could very well in your test class/method use

PERFORM <form> IN PROGRAM <prog>

And then validate the results you get back.

Edit:

Furthermore, the SAP help states this :
Creating ABAP Unit Tests
ABAP Unit tests are implemented in the form of test methods in local test classes in ABAP programs and the expected results are checked using the static methods of the auxiliary class CL_AUNIT_ASSERT.

Which validates the point that tests for ABAP programs should be local test classes as per some below answers. One can still use PERFORM <form> IN PROGRAM <prog> but I would venture it is a better approach to have the tests locally.

T.