Dire che non sono testabili è impreciso. Sono molto testabili, ma non sono raggirabili e quindi non sono test-friendly. Cioè, ogni volta che provi un'unità di codice che chiama questo metodo, devi testare il metodo. Se il metodo viene mai interrotto, molti test falliranno e non sarà ovvio perché.
Con questo in mente, la soluzione è abbastanza ovvia. Rendilo una classe non statica, estrai un'interfaccia con tutti i metodi e passa il tuo helper in ogni classe che ne ha bisogno, preferibilmente attraverso il costruttore e preferibilmente usando un contenitore IOC.
public class FileHelper : IFileHelper
{
public void ExtractZipFile(Stream zipStream, string location)
{
..................................
}
public void CreatePageFolderIfNotExist(string directory)
{
.................................................
}
.......................................................
.......................................................
}
public interface IFileHelper
{
void ExtractZipFile(Stream zipStream, string location);
void CreatePageFolderIfNotExist(string directory);
.......................................................
.......................................................
}
public class MyClass
{
private readonly IFileHelper _fileHelper;
public MyClass(IFileHelper fileHelper)
{
_fileHelper = fileHelper;
}
}