On Sun, 26 Jun 2005 16:10:05 -0700, Steve Jorgensen <[EMAIL PROTECTED]> wrote:
>I'm posting this message for 2 reasons. > >First, I'm still pretty new and shakey to the whole Acceptance Testing thing, >and I'm hoping for some feedback on whether I'm on the right track. Second, >although all the Agile literature talks about the importance of doing >Acceptance Testing, there's very little in any of the books or out on the Web >that helps with how to do it. If I am on the right track, this will be one >more helpful item folks can find on a Google search. > >The code below is basically a spike I wrote in a few hours last night to prove >to myself and my team that it would be feasible to quickly create a simple, >useful Acceptance Testing harness for our learning project. ... Here's an updated script and code to process the script. I made the script syntax more friendly. New example script... ========== Check recipeListCount is 0 Do new Check name is "New Recipe" Keyin "PB&J" to name Ch eck name is "PB&J" Do save Do close Check recipeListCount is 1 Do goToListItem 1 Do openListItem Check name is "PB&J" ========== New Python code for test runner including skeleton of application model that can be tested, but can't pass the tests... ========== import string class RecipeOrgModel: recipeListCount = 0 name = "New Recipe" def new(self): pass def save(self): pass def close(self): pass def goToListItem(self,itemNum): pass def openListItem(self): pass class Action: failMessage = "" def __init__(self, actionArgs): pass def tryAction(self, model): return True class NoAction (Action): pass class ActionDo (Action): item = "" args = "" def __init__(self, actionArgs): delimPos = string.find(actionArgs, " ") self.args = "" if delimPos==-1: self.item = actionArgs else: self.item = actionArgs[0:delimPos] self.args = string.strip(actionArgs[delimPos+1:]) def tryAction(self, model): methodCall = "model." + self.item +"(" + self.args + ")" exec(methodCall) return True class ActionKeyin (Action): item = "" value = "" def __init__(self, actionArgs): delimPos = string.find(actionArgs, " to ") self.args = "" if delimPos==-1: self.item = actionArgs else: self.value = eval( actionArgs[0:delimPos] ) self.item = string.strip(actionArgs[delimPos+len(" to "):]) def tryAction(self, model): setattr(model, self.item, self.value) return True class ActionCheck (Action): item = "" expectValue = "" def __init__(self, actionArgs): delimPos = string.find(actionArgs, " is ") self.args = "" if delimPos==-1: self.item = actionArgs else: self.item = actionArgs[0:delimPos] self.expectValue = eval( string.strip(actionArgs[delimPos+len(" is "):]) ) def tryAction(self, model): valueIs = getattr(model, self.item) if self.expectValue == valueIs: return True else: self.failMessage = ( "Expected " + str(self.expectValue) + " but got " + str(valueIs) ) return False class ActionUnknown (Action): actionArgs = "" def __init__(self, actionArgs): self.actionArgs = actionArgs def tryAction(self, model): self.failMessage = "Test statement not understood: " + self.actionArgs return False def MakeTestAction(lineText): delimPos = string.find(lineText, " ") commandArgs = "" if delimPos==-1: commandType = lineText else: commandType = lineText[0:delimPos] commandArgs = string.strip(lineText[delimPos+1:]) if commandType == "Do": return ActionDo(commandArgs) elif commandType == "Keyin": return ActionKeyin(commandArgs) elif commandType == "Check": return ActionCheck(commandArgs) elif commandType == "": return NoAction(commandArgs) else: return ActionUnknown(commandType + " " + commandArgs) class TestSession: fileName="" lines = None model = RecipeOrgModel() def __init__(self,fileName): self.fileName = fileName def run(self): self.loadLines(self.fileName) for line in self.lines: print(line) action = MakeTestAction(line) actionOk = action.tryAction(self.model) if not actionOk: print(" !!! " + action.failMessage) break def loadLines(self, fileName): file = open(fileName) lines = file.readlines() file.close lines = map(string.strip,lines) self.lines = lines session = TestSession("test1.txt") session.run() ========== Ouptut of test runner using example script... ========== Check recipeListCount is 0 Do new Check name is "New Recipe" Keyin "PB&J" to name Check name is "PB&J" Do save Do close Check recipeListCount is 1 !!! Expected 1 but got 0 ========== -- http://mail.python.org/mailman/listinfo/python-list