Nouveau dans le monde de TDD et j'ai bientôt découvert que moquer parfois n'est pas aussi facile. Nous utilisons MOQ au travail, donc j'ai besoin d'apprendre comment faire cela en utilisant moqMoq et Motif de commande. Je suis en difficulté pouvez-vous aider?
J'ai un peu de code en utilisant le modèle de commande et fonctionne un régal.Cependant, si je devais tester le conduire, je ne saurais pas comment le faire mettre en œuvre le code ci-dessous.
Je l'ai fait ce qui suit
- Créé BaseToolStripMenuItem: ToolStripMenuItem et ajouté une propriété de commande (voir ci-dessous)
- créé une forme de fenêtres et a ajouté un MenuStrip avec 2 Ouvrir et Quitter
Dans le formulaire que je viens d'ajouter à la carte de la commande à un bouton et tout fonctionne un régal.
Je voudrais changer le code afin que je puisse UnitTest en utilisant Moq mais ne vois pas comment ???
Pouvez-vous m'aider?
Des suggestions?
Merci beaucoup!
public interface ICommand
{
void Execute()
}
public abstract class BaseCmd :ICommand
{
protected ProcessMenuCommand ProcessCommand;
protected MenuCommandFactory Factory;
protected BaseCmd(ProcessMenuCommand processMenuCommand, MenuCommandFactory cmdfactory)
{
ProcessCommand = processMenuCommand;
Factory = cmdfactory;
}
abstract public void Execute();
}
public class BaseToolStripMenuItem : ToolStripMenuItem
{
public BaseToolStripMenuItem()
{
Click += MenuItemClick;
Command = null;
}
public BaseCmd Command { get; set; }
private void MenuItemClick(object sender, EventArgs args)
{
if (Command != null) Command.Execute();
}
}
public class MenuCommandFactory
{
private readonly ProcessMenuCommand _processMenuCommand;
public MenuCommandFactory(ProcessMenuCommand processMenuCommand)
{
_processMenuCommand = processMenuCommand;
}
public OpenFileCmd OpenFile()
{
return new OpenFileCmd(_processMenuCommand,this);
}
public ExitCmd Exit()
{
return new ExitCmd(_processMenuCommand, this);
}
}
public class OpenFileCmd:BaseCmd
{
public OpenFileCmd(ProcessMenuCommand processMenu,MenuCommandFactory menuCommandFactory)
:base(processMenu,menuCommandFactory)
{
}
public override void Execute()
{
ProcessCommand.OpenFile();
}
}
public class ProcessMenuCommand
{
public void OpenFile()
{
MessageBox.Show("Open a file");
}
public void Exit()
{
MessageBox.Show("Exiting");
}
}
public class ExitCmd:BaseCmd
{
public ExitCmd(ProcessMenuCommand processMenu, MenuCommandFactory menuCommandFactory)
:base(processMenu,menuCommandFactory)
{
}
public override void Execute()
{
ProcessCommand.Exit();
}
}
//In the form
public partial class Form1 : Form
{
private ProcessMenuCommand menuCommandProcessor;
private MenuCommandFactory factory;
public Form1()
{
InitializeComponent();
// Created editor and factory.
menuCommandProcessor = new ProcessMenuCommand();
factory = new MenuCommandFactory(menuCommandProcessor);
// Get concrete command objects from factory and assign to corresponding menu items and tool strip buttons.
tsOpen.Command = factory.OpenFile();
tsExit.Command = factory.Exit();
}
}
Pouvez-vous affiner un peu la partie ou la fonctionnalité que vous aimeriez tester mais que vous trouvez difficile? – Mathias