Whenever a method doesn't need an instance of a class and may need to be used separately from any instance of the class, it should be static, provided it can be safely depended on. An instance of a class can be passed as an argument to a static method, however I would consider this bad practice, as it can create difficult to debug code.
Misusing static methods, can certainly create very hard to test code. If the static method needs to be tested in a unit test with non static methods, then it shouldn't be static. However, if you can fully test the method for all possible edge cases independently from any class instance, then no need to worry about unit testing because the static method can have its own separate unit test.
Another thing you should consider, is dependency injection. Static methods can be overwritten by putting them in a separate namespace. To overwrite the static methods, you can simply swap the namespace to one with your overwritten static methods. However, if you are needing to do this, then it is more likely you are misusing statics.
If a method currently makes sense to be static but may not after future modifications, then it's better to have it as non-static. It needs to be depended on without the risk of it causing bugs. Misusing statics can certainly lead to a dependency nightmare.
A lot of people consider it best practice to avoid static methods, however I disagree because every programming language has loads of build in functions and keywords that are static. We don't rewrite them just because they are static. We simply don't worry about it because we know we can depend on them and if we want to, we can can very easily test them for any possible edge case.