That is really strange. So, what you are saying is, you have a class like:
@isTest
public class TestClass{
}
And this class has a method like:
@isTest
public class TestClass{
public void nonTestMethod(){
}
}
and when that method is called from a different context, let's say a different public class:
public class NonTestClass{
public NonTestClass(){
new TestClass().nonTestMethod();
}
}
and you are seeing this fail now?
To be honest, that definitely makes sense. As far as I know, it should have always worked like that. Check out the documentation on the @isTest annotation:
Methods of a public test class can only be called from a running test,
that is, a test method or code invoked by a test method, and can't be
called by a non-test request. In addition, test class methods can be
invoked using the Salesforce user interface or the API. For more
information, see Running
Unit Test Methods.
EDIT: By the way, I would heavily suggest against mixing your test methods and your functional code in the same class. I would highly suggest refactoring your code so that you have two classes, one for the functional and one for the test. For instance, I would have two classes called AccountController and then AccountControllerTest. All of the logic would be contained in AccountController and AccountControllerTest would be marked with the @isTest annotation and only contains testMethods.
There are several good reasons for this, but let me direct you to the Salesforce documentation:
Defining classes of test methods with the isTest annotation
Use the isTest class annotation to define classes that only contain
code used for testing your application. If your test methods are
contained within their own classes and the Apex class only contains
test methods, it is ideal to use the isTest annotation.
Classes defined with the isTest annotation do not count against your
organization limit of 2 MB for all Apex code. Classes annotated with
isTest must be declared as private. They cannot be interfaces or enums
either.
Here is an example of the syntax:
@isTest
private class MyTest {
// Methods for testing
}
On top of this benefit right out of the box with Salesforce, it makes a good logical break between what is test code and what is functional code. It makes the process of using Test Driven Development (TDD) much easier.