TDD: Create a Game logic using Test-First Programming

I’m implementing a simple command line game using TDD principles and Unit Testing. My goal is to implement the whole game using Test-First Programming, so every behaviour/class is created from a test. I’ve already implemented things like a Player (the game needs a player), the Enemy (the player fights the enemy) and other stuff but now that I have to implement the Game logic itself, which actually takes all these classes and combines them together to achieve the functionality, I’m stuck. The problem is that the Game itself should just expose a Run() method and nothing more. This is because it’s the game itself that runs its logic and not someone else from the outside that tells it what to do.

Here is some pseudo-code,

class Game {     Game(Player p, EnemyFactory f)     {        this._player = p;        //and so on...     }      public void Run()     {        // All the game logic goes here        // In example:        int totalEnemies = 5;        while(_player.IsAlive && totalEnemies > 0)        {            Enemy enemy = _enemyFactory.CreateEnemy();            _player.Fight(enemy);            // other stuff            totalEnemies--;        }         GameOver();     }      private GameOver()     {        //other stuff     } } 

As you can see, the main logic is inside the Run function, which makes sense to expose as public, so that the Main() function that creates a Game class also calls Run(), but since all the logic will be a bunch of private functions, how do I create it from the tests first? The only thing that comes to my mind is or to use Mock, which I really don’t want to do, or to expose some public functionality, but I don’t want to create public behaviours that will be called only from the tests, because it’s not a good practice.

Any idea please?